Oracle 存儲過程包(Package、Package Body)


初出茅廬,不知原來存儲過程還可以寫得如此復雜,而且還竟然可以調試!

好吧,得整理一下存儲過程的一些語法,以備以后用到時可以查閱。

使用數據庫: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基礎語法

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM