存储过程 包含三部分: 声明,执行部分,异常。
可以有无参数程序和带参数存储过程。
无参程序语法
1
create
or
replace
procedure
NoParPro
2 as
;
3 begin
4
;
5 exception
6
;
7 end ;
8
2 as

3 begin
4

5 exception
6

7 end ;
8
带参存储过程实例
1
create
or
replace
procedure
queryempname(sfindno emp.empno
%
type)
as
2 sName emp.ename % type;
3 sjob emp.job % type;
4 begin
5 ....
7 exception
....
14 end ;
15
2 sName emp.ename % type;
3 sjob emp.job % type;
4 begin
5 ....
7 exception
....
14 end ;
15
带参数存储过程含赋值方式
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
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
过程调用
方式一
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
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
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