C/C++教程

Oracle存储过程创建及调用

本文主要是介绍Oracle存储过程创建及调用,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

为了测试Oracle存储过程,我分别在window和Linux上都装了数据库的服务端,但刚开始我并不知道我装的是啥,也不知道服务端,客户端,客户端工具都分别是干啥的。刚开始,我在Linux系统上折腾了两天,把Oracle的服务端装好了,但我发现我没Scott用户,于是上网找教程,但奇怪的是运行脚本也没用,翻了好多个博客,偶然发现是因为我在安装时选择了装成容器型数据库,其实我感觉也没啥影响,但碍于网上容易找到的资料都是有Scott用户的,于是我删了数据库,开始重装,我只删了示例,然后装好之后,就碰到了各种问题,因为和原来的实例名不一样,我刚开始连不上数据库,然后折腾了半天,我连上了一个idle实例,运行脚本时报错,提示我没log on 还是啥的,我又查了资料,要start up,但我start up 是总提示不能创建某个文件,我找了半天,看网上资料显示要查询当前控制文件目录,我找了目录,然后按给出的路径去找,好家伙,俩控制文件都丢了,我又搜控制文件丢了咋整,然后按网上给的方法,去找,然而找到一半我发现,我好像删的时间过长,以至于找不到记录,然后又开始搜其他的方法,偶然看到可以用备份,于是我按照路径,找了一个备份,然后将它改名,复制到数据库里给出的控制文件的路径上,重新登陆数据库,好家伙,提示我容器数据库安装有错误。然后我把Oracle数据库完全从我Linux上卸载了。然后又上网找了分安装指南,这次我换成了rpm安装包,和我第一次安装的时候用的一样,这是我第四次装Oracle了,然后我按照说明把它给装完了,但说明后面还有一段是用Navicate连接数据库的,我不知道是不是属于安装的一部分,暂时没管。

转回我windows系统上,由于我用命令行创建存储过程时漏了一个“/“,导致我认为不能通过命令行直接创建存储过程,应该要借助一个有界面的工具,开始上网搜,于是我先后整了PL/SQL,sql server,Navicate,然后我发现,这三个好像与用途都是一样的,作为客户端工具连接数据库,问题来了,我就是连不上我的数据库,但在我不断上网瞎搜的情况下,我终于发现命令行是可以直接创建存储过程的,只需要在最后一行加一个”/“。

下面是一些存储过程示例:

语法:

************************************************************************************************************************

create or replace procedure <procedure_name>

[(<parameter list>)]

as|is

<local variable statements> --创建过程,可指定运行过程需传递的参数

begin

<executable statements> --包括在过程中要执行的语句

[exception

<exception handlers>] --处理异常

end;
****************************************************************************************************************************

 

创建无参存储过程:

create or replace procedure first_proc
is
begin
  dbms_output.put_line('我是存储过程');
  dbms_output.put_line('hello everyone!');
end;

调用无参存储过程:

begin
  first_proc;
end;

或者:
exec first_proc;
创建带输入参数存储过程:

create or replace procedure second_proc
(
  v_empno in empnew.empno%type
)
is
begin
  --根据员工号删除指定的员工信息
  delete from empnew where empno = v_empno;
  
  --判断是否删除成功
  if sql%notfound then
    --创建我们自己的异常条件,当Oracle不会抛出它们时 -2000至20999之间
    raise_application_error(-20008,'指定删除的员工不存在!');
  else
    dbms_output.put_line('删除成功!');
  end if;
  
end;

调用带输入参数存储过程:

begin
  second_proc(131854);
end;
创建带输出参数存储过程:

create or replace procedure third_proc
(
   v_deptno in number,
   v_avgsal out number,
   v_cnt out number
)
is
begin
  select avg(sal),count(1) 
  into v_avgsal,v_cnt
  from emp
  where deptno = v_deptno;
  
  exception
    when no_data_found then
      dbms_output.put_line('没有此部门!');
    when others then
      dbms_output.put_line(sqlerrm);--打印异常信息
    
end;

调用带输出参数存储过程:

declare
  v_avgsal number;
  v_cnt number;
 
begin 
  third_proc(10,v_avgsal,v_cnt);
  --打印结果
  dbms_output.put_line(v_avgsal);
  dbms_output.put_line(v_cnt);
end;
创建带输入输出参数的存储过程:
create or replace procedure four_proc
(
    v_num1 in out number,
    v_num2 in out number
)
as
    --定义变量
    v_temp number :=0;
begin
  v_temp := v_num1;
  v_num1 := v_num2;
  v_num2 := v_temp;
end;

调用带有输入输出参数的存储过程:


declare
  v_num1 number:=10;
  v_num2 number:=20;
begin
  four_proc(v_num1,v_num2);
  --打印结果
  dbms_output.put_line(v_num1);
  dbms_output.put_line(v_num2);
end;
其他命令:
drop procedure 存储过程名称; ----删除存储过程
create table table_name_new as select * from table_name_old;-----复制表结构及其数据:
desc + 表名;----命令行下显示表结构;

 

这篇关于Oracle存储过程创建及调用的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!