example
1 create or replace procedure test(
2 param1 varchar2,
3 param2 out varchar2,
4 param3 in out varchar2
5 ) as
6 v_name varchar2(20);
7 begin
8 v_name := 'david';
9 param3 := v_name;
10 dbms_output.put_line('param3:'||param3);
11 exception
//抛出异常处理
12 end;
说明
第一行 是创建语句,如果不存在则创建,如果存在,则去替换,test为存储过程的名称
-
第二行到第四行 是存储过程的参数,参数名,参数传递方式(IN ,OUT, IN OUT),参数类型
参数注意点
- 参数名不能重复
-
传递方式详解
- IN 表示输入参数,按值传递方式,如果不指定,则默认是IN,在存储过程中 不能被重新赋值,只能使用,相当于java中的final
- OUT 表示输出参数,可以理解为按引用传递方式。可以作为存储过程的输出结果
- IN OUT 即可作输入参数,也可作输出参数。即可修改
- 参数的数据类型只需要指明类型名即可,不需要指定宽度
- 参数的宽度由外部调用者决定
- 存储过程可以有参数,也可以没有参数
- 第五行 变量声明块:紧跟着的as(is)关键字,用于声明变量
- 第六行 声明变量(存储过程需要用到的变量),必须指定宽度,
- 第七行 过程语句块,从begin关键字开始为过程的语句块,实现具体的逻辑
- 第十一行 异常处理块,关键字为exception,该部分可写可不写
- 第十二行 结束块,end关键字结尾
调用
SQL> var p1 varchar2(10);
SQL> var p2 varchar2(10);
SQL> var p3 varchar2(10);
SQL> exec :p1 :='aaaa';
SQL> exec :p2 :='bbbb';
SQL> exec :p3 :='cccc';
SQL> exec proc1(:p1,:p2,:p3);
param1:aaaa
param2:
param3:david
SQL> exec dbms_output.put_line(:p2);
PL/SQL procedure successfully completed
p2