oracle 进阶(二)存储过程的使用

存储过程

存储过程相当于 Java 中的无返回值函数,可以被其它模块反复调用,但是存储过程可以通过输出参数返回多个处理结果,存储过程会在数据库中一直保留,直到被删除。

1、语法结构

CREATE [OR REPLACE] PROCEDURE 
 [schema.]procedure_name
[arg1 [IN|OUT|IN OUT]] arg_type1,
[arg2 [IN|OUT|IN OUT]] arg_type2,
……
IS|AS
--声明部分
BEGIN
--执行部分
EXCEPTION
--异常处理部分
END procedure_name;

说明:
其中: OR RELACE 是可选的。
如果省略,则创建时不允许数据库中有同名的过程;
如果使用,则会先删除同名的过程,然后创建新的过程。
arg1,arg2,…,argn 是过程的形参的名称,是可选的。
arg_type1, arg_type2,…,arg_typen 是对应的型参的数据类型,参数类型可以是基本的数据类型,也可以是 %type 或 %rowtype 匹配的类型,不能使用空值 null,但是存储过程可以返回空值。
注意:此处的数据类型后面不能带参数,
即精度、范围等,如 NUMBER(12,2)只能写成 NUMBER,varchar2(20),只能写成 varchar2。
IN|OUT|IN OUT 是形参的模式。如果省略则为 IN 模式。
IN
用于接受调用程序的值 默认的参数模式
OUT
用于向调用程序返回值
IN OUT
用于接受调用程序的值,并向调用程序返回更新的值

2、示例

无参存储过程:

--创建过程,无参过程名后不要加括号
create or replace procedure proc_first
is
  v_ename varchar2(10):='北京';
begin
  dbms_output.put_line(v_ename);
end proc_first;

有参数存储过程:

--创建有参数的过程
create or replace procedure proc_find(
       v_eno number,
       v_esal out number
       )
is
  v_ename emp.ename%type;
begin
   select ename,sal into v_ename,v_esal from emp where empno=v_eno;
  dbms_output.put_line(v_ename||'--'||v_esal);
end proc_find;

3、执行

使用 EXECUTE 语句
语法

EXECUTE procedure_name (list of parameters) ;

其中,
Procedure_name 是过程的名称,
list of parameters 是参数列表。

--执行无参存储过程
declare
begin
    proc_first();
end;
--执行有参存储过程
declare
       v_esal number;
begin
     proc_find(7369,v_esal);
end;

4、删除

语法

DROP PROCEDURE procedure_name;

其中,procedure_name 是过程的名称。

--删除存储过程
drop procedure proc_first;

上一篇 oracle 进阶(一)块的使用
目录
下一篇 oracle 进阶(三) 函数的使用