-----------------------------------------------
A,使用存儲過程參數(shù)
-----------------------------------------------
定義語法:
CREATE [OR REPLACE] PROCEDURE procedure_name
(arg1 [mode1] type1 [default default_value], arg2 [mode2] type2, ...)
IS [AS]
PL/SQL Block;
說明:
在定義參數(shù)時,只能指定數(shù)據(jù)類型,不能指定長度。
參數(shù)類型為IN(默認(rèn)),OUT,IN OUT三種。
使用集合類型作為返回值時,需要使用自定義的嵌套表類型或者VARRAY類型。
存儲過程示例:
CREATE OR REPLACE PROCEDURE out_time
IS
BEGIN
DBMS_SESSION.set_nls ('NLS_DATE_FORMAT', '''YYYY-MM-DD HH24:MI:SS''');
DBMS_OUTPUT.put_line (SYSDATE);
END;
/
-----------------------------------------------
B,調(diào)用存儲過程
-----------------------------------------------
在SQL*Plus中調(diào)用過程時,需要使用CALL或者EXECUTE命令;而在PL/SQL塊中過程可以直接引用。
exec procedure_name()
參數(shù)傳遞:位置傳遞,名稱傳遞,組合傳遞。
exec procedure_name('arg1_value', arg2=>'arg2_value')
-----------------------------------------------
C,維護(hù)存儲過程
-----------------------------------------------
第一,刪除過程
DROP PROCEDURE procedure_name;
第二,顯示編譯錯誤
方法一:執(zhí)行命令
SHOW errors
方法二:查詢數(shù)據(jù)字典
SELECT *
FROM user_errors;
第三,確定過程狀態(tài)
當(dāng)使用ALTER TABLE命令改變表結(jié)構(gòu)時,會將基本該表的子程序狀態(tài)改為INVALID狀態(tài)。使用下面的語句可以查詢對象的狀態(tài),
SELECT *
FROM user_objects;
第四,編譯過程
為了避免過程的運(yùn)行時錯誤,應(yīng)該重新編譯處于INVALID狀態(tài)的過程。
ALTER PROCEDURE procedure_name COMPILE;
編譯函數(shù):
ALTER FUNCTION procedure_name COMPILE;
第五,查看過程代碼
查詢數(shù)據(jù)字典USER_SOURCE,可以獲得子程序名稱以及源代碼。
SELECT *
FROM user_source t
WHERE t.NAME = 'OUT_TIME';