初出茅廬,不知原來存儲過程還可以寫得如此復雜,而且還竟然可以調試!
好吧,得整理一下存儲過程的一些語法,以備以后用到時可以查閱。
使用數據庫:Oracle
數據庫工具:PL/SQL Developer
在Oracle中使用存儲過程可以聲明單個存儲過程,也可以使用包的方式一個存儲過程包(PACKAGE)包含許多存儲過程。
編寫單個存儲過程的格式可以參考下面這個例子,這是最簡單的存儲過程例子:
CREATE OR REPLACE PROCEDURE PROC_TEST IS
/* 聲明變量 */
count number;
BEGIN
/* SQL代碼 */
select * from dual;
/* 異常處理 */
EXCEPTIOIN
WHEN NO_DATA_FOUND THEN
--處理代碼
WHEN OTHERS THEN
--處理代碼
END PROC_TEST; --這里也可以直接寫成: "END;"
如果有許多存儲過程,那么你可能需要用到存儲過程包。在Oracle中使用存儲過程包首先要先創建package聲明存儲過程,之后創建package body寫存儲過程的具體內容。
存儲過程的package相當於Java中的接口,而package body就相當於Java中實現該接口的類。
1.聲明存儲過程
CREATE OR REPLACE PACKAGE PACK_ZOO IS
/* 不帶參數的存儲過程 */
PROCEDURE WATCH_MONKEY;
/* 帶參數的存儲過程 */
PROCEDURE FEED_MONKEY(p_food IN VARCHAR2, p_amount IN NUMBER);
END PACK_ZOO;
①在oracle的存儲過程中,形式參數(形參)聲明用IN關鍵字。上面代碼[p_food IN VARCHAR2] 中,p_food為變量名,IN為關鍵字,VARCAHR2為變量類型。
②在存儲過程中聲明參數,則是直接變量名后跟上變量類型,如下面代碼中的name參數:[name VARCAHR2(12)]。
2.編寫存儲過程內容
CREATE OR REPLACE PACKAGE BODY PACK_ZOO IS
/*
* 不帶參數的存儲過程
*/
PROCEDURE WATCH_MONKEY IS
/* 參數聲明 */
name VARCHAR2(12);
BEGIN
/* 處理體 */
SELECT * FROM DUAL;
/* 異常處理 */
EXCEPTION
WHEN NO_DATA_FOUND THEN
DBMS_OUTPUT.PUT_LINE('無數據記錄');
WHEN OTHERS THEN
DBMS_OUTPUT.PUT_LINE('異常代碼:' + sqlcode); --sqlcode代表異常代碼
DBMS_OUTPUT.PUT_LINE('異常信息:' + sqlerrm); --sqlerrm代表異常信息
END WATCH_MONKEY;
/*
*帶參數的存儲過程
*/
PROCEDURE FEED_MONKEY(p_food IN VARCHAR2, p_amount IN NUMBER) IS
/* 參數聲明 */
name VARCHAR2(12);
BEGIN
/* 處理體 */
name := 'Hello Oracle!';
/* 異常處理 */
EXCEPTION
WHEN NO_DATA_FOUND THEN
DBMS_OUTPUT.put_line('CATCH EXCEPTIOIN');
WHEN OTHERS THEN
DBMS_OUTPUT.PUT_LINE('異常代碼:' + sqlcode); --sqlcode代表異常代碼
DBMS_OUTPUT.PUT_LINE('異常信息:' + sqlerrm); --sqlerrm代表異常信息
END FEED_MONKEY;
END PACK_ZOO;
在方法體里要給一個變量賦值,應該使用符號 " := ",如:" name := 'Hello Oracle!' "。
這里用到的語法是PLSQL語法,想了解更多關於PLSQL語法的知識,可以看我的另一篇文章:PL/SQL基礎語法
