Oracle預存程序包含三部分:過程聲明,執行過程部分,預存程序異常。
- Oracle預存程序可以有無參數預存程序和帶參數預存程序。
- 一、無參程式過程文法
- 1 create or replace procedure NoParPro
- 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
-
- 三、 帶參數預存程序含賦值方式
- 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
-
- 四、在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