PL/SQL中的存储过程

Posted by 道行尚浅 on April 3, 2008

存储过程与匿名块的区别

存储过程是命名块,可以存储与数据库中,存储过程创建成功后,以后想要执行存储过程中的语句,直接调用存储过程即可.

而命名块需要重新编写或者粘贴执行.

存储过程与匿名块的写法非常类似,只有两点不同

  • 存储过程需要创建,所以需要执行create proceudre 语句
  • 存储过程可以有0-N个参数,匿名块没有参数

参数的类型

  • IN 输入参数 不可赋值
  • OUT 输出参数 可以赋值
  • IN OUT 输入输出参数 可以赋值

例程:无参数存储过程

CREATE OR REPLACE PROCEDURE P0 IS
BEGIN
   DBMS_OUTPUT.put_line('HELLO DAO');
END ;

调用过程

exec p0 ; 

执行结果

HELLO DAO
PL/SQL procedure successfully completed

例程:IN 类型参数 与 OUT 类型参数

create or replace procedure p1(v1 number, v2 number, v3 out number) is
begin
  v3 := v1 + v2;
  dbms_output.put_line(v3);
end;

调用过程

DECLARE
  RES NUMBER;
BEGIN
   P1(1, 2,RES);
END ;

执行结果

3
PL/SQL procedure successfully completed

例程:IN OUT 类型参数

create or replace procedure p2
       (v1 in out number,v2 in number)
       is
begin
  v1:=v1+v2;
  dbms_output.put_line('v1='||v1);
end;

调用过程

DECLARE
  RES NUMBER :=5;
BEGIN
   P2(RES, 2);
END ;

执行结果

v1=7
PL/SQL procedure successfully completed