Oracle 存储过程

存储过程就是一组用于完成特定数据库功能的SQL 语句集,该SQL语句集经过编译后存储在数据库系统中。在使用时候,用户通过指定已经定义的存储过程名字并给出相应的存储过程参数来调用并执行它,从而完成一个或一系列的数据库操作。

Oracle存储过程包含三部分:过程声明,执行过程部分,存储过程异常。

1 create or replace procedure 过程名
2 as  ...;      --声明语句段
3 begin
4 ...;          --执行语句段
5 exception     --异常处理语句段
6     ...;
7 end;

 

 1 create or replace procedure runbyparmeters  (isal in emp.sal%type, 
                            sname out varchar,sjob in out varchar)
 2  as icount number;   --声明语句段
 3  begin    --执行语句段
 4       select count(*) into icount from emp where sal>isal and job=sjob;
 5       if icount=1 then
 6         ....
 9       else
10         ....
12       end if;
13  exception  --异常处理语句段
14       when too_many_rows then
15       DBMS_OUTPUT.PUT_LINE(返回值多于1行);
16       when others then
17       DBMS_OUTPUT.PUT_LINE(在RUNBYPARMETERS过程中出错!);
18  end;
19 

 

存储过程名定义:包括存储过程名和参数列表,参数名和参数类型,参数名不能重复, 参数传递方式:IN, OUT, IN OUT 
IN 表示输入参数,按值传递方式。 
OUT 表示输出参数,可以理解为按引用传递方式。可以作为存储过程的输出结果,供外部调用者使用。 
IN OUT 即可作输入参数,也可作输出参数。 
参数的数据类型只需要指明类型名即可,不需要指定宽度,参数的宽度由外部调用者决定。 
过程可以有参数,也可以没有参数 
变量声明块:紧跟着的as (is )关键字,可以理解为pl/sql的declare关键字,用于声明变量。 
变量声明块用于声明该存储过程需要用到的变量,它的作用域为该存储过程。另外这里声明的变量必须指定宽度。遵循PL/SQL的变量声明规范。 
过程语句块:从begin 关键字开始为过程的语句块。存储过程的具体逻辑在这里来实现。 
异常处理块:关键字为exception ,为处理语句产生的异常。该部分为可选 
结束块:由end关键字结果。

 

在Oracle中对存储过程的调用

过程调用方式一

 1 declare
 2        realsal emp.sal%type;
 3        realname varchar(40);
 4        realjob varchar(40);
 5  begin   //存储过程调用开始
 6        realsal:=1100;
 7        realname:=‘‘;
 8        realjob:=CLERK;
 9        runbyparmeters(realsal,realname,realjob);     --必须按顺序
10        DBMS_OUTPUT.PUT_LINE(REALNAME||   ||REALJOB);
11  END;  //过程调用结束
12 

 

 过程调用方式二

 1 declare
 2       realsal emp.sal%type;
 3       realname varchar(40);
 4       realjob varchar(40);
 5 begin    //过程调用开始
 6       realsal:=1100;
 7       realname:=‘‘;
 8       realjob:=CLERK;
 9       runbyparmeters(sname=>realname,isal=>realsal,sjob=>realjob);  --指定值对应变量顺序可变
10       DBMS_OUTPUT.PUT_LINE(REALNAME||   ||REALJOB);
11 END;  //过程调用结束
12

 

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。