回覆列表
-
1 # 淮安二傻子
-
2 # IT生涯
儲存過程基本語法
create or replace procedure update_emp_sal(
Name in out type, Name in out type, ...
)
isbegin end update_emp_sal;
-
3 # JAVA猿
儲存過程語法格式:
CREATE [OR REPLACE] PROCEDURE procedure_name
[(parameter1[model] datatype1, parameter2 [model] datatype2..)]
IS[AS]
BEGIN
PL/SQL;
END [procedure_name];
說明:
parameter用於指定引數,model用於指定引數模式,datatype用於指定引數型別
定義儲存過程的引數時,只能指定資料型別,不能指定資料長度
IS/AS用於開始PL/SQL程式碼塊
建立儲存過程時,既可以指定引數也可以不指定任何引數;
儲存過程引數:
1)輸入引數 IN:IN用於接收呼叫環境的輸入引數(建立儲存過程時,輸入引數的IN可以省略)
2) 輸出引數 OUT:OUT用於將輸出資料傳遞到呼叫環境
3) 輸入輸出引數(IN OUT):其中IN用於接收呼叫環境的輸入引數,OUT用於將輸出資料傳遞到呼叫環境
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; //過程呼叫結束