PL/SQL學習筆記(一)

最近因爲對Oracle比較感興趣,所以打算深入學習一下PL/SQL,後期打算再學習一下Oracle ERP,正好有機會進到這個項目團隊,正好可以跟老鳥門學習一下,下面是我的學習經歷和筆記

 

 

PL/SQL塊結構

 

    DECLARE
    /*
     *  定義部分-定義常量、變量、複雜數據類型、遊標、例解
     */
    BEGIN
    /*
     *  執行部分-PL/SQL語句和SQL語句
     */
    EXCEPTION
    /*
     *  例外處理部分-處理運行錯誤
     */
    END;   /* 塊結束標記*/

 

   定義部分DECLARE是可選的,執行部分以BEGIN開始,是必須的,例外處理部分以EXCEPTION開始,該部分是可選的,而END是PL/SQL塊的結束標記

 

PL/SQL塊分類 :可以分爲匿名塊和命名塊,匿名塊可以內嵌到應用程序中,也可以在交互環境使用。命名塊是具有特定標識的PL/SQL塊,命名塊和匿名塊非常相似,只不過在PL/SQL塊前加以<<>>標記,當使用嵌入時,爲了區分多級嵌套曾次關係,可以使用命名塊加以區分。

 

 

 子程序

 

 子程序包括過程,函數,包。既可以開發客戶端的子程序,也可以開發服務器端的子程序,客戶端主要用在Developer中,而服務器子程序可以用在任何應用程序中,通過將商業邏輯和企業規則集成到PL/SQL子程序中。

 

 過程 :是用於執行特定操作,當建立過程時,既可以指定輸入參數(IN),也可以指定輸出參數(OUT)。通過在過程中使用輸入參數,可以將應用環境的數據傳遞到執行部分;通過使用輸出參數,可以將執行部分的數據傳遞到應用環境。在SQL*PLUS中可以使用CREATE PROCEDURE命令建立過程。

  eg:

      CREATE PROCEDURE update_sal(name VARCHAR2,newsal NUMBER)

      IS

      BEGIN

         UPDATE emp SET sal = newsal

         WHERE lower(ename) = lower(name);

      END;

 

 

     SQL>exec update_sal('scott',2000);

     SQL>call update_sal('scott',2000);

 

 

函數 :用於返回特定數據,當建立函數時,在函數頭部必須包含RETURN子句,而在函數體內必須要包含RETURN語句返回數據。在SQL*PLUS中可以使用CREATE FUNCTION命令建立函數。

 

    eg:

        CREATE FUNCTION annual_income(name VARCHAR2)

        RETURN NUMBER IS

           annual_salary NUMBER(7,2);

        BEGIN

           SELECT sal*12+nvl(comm,0) INTO annual_salary

           FROM emp WHERE lower(ename) = lower(name);

           RETURN annual_salary;

        END;

 

 

     SQL>VAR income NUMBER

     SQL>CALL annual_income('scott') INTO :income

     SQL>PRINT income

:用於邏輯組合相關的過程和函數,它由包規範和包體兩部分組成。包規範用於定義公用的常量、變量、過程和函數,在SQL*PLUS中可以使用CREATE PACKAGE命令建立包規範,使用CREATE PACKAGE BODY命令建立包體。

 

     eg:

         CREATE PACKAGE emp_pkg IS

              PROCEDURE update_sal(name VARCHAR2,newsal NUMBER);

              FUNCTION annual_income(name VARCHAR2) RETURN NUMBER;

         END;

 

         CREATE PACKAGE BODY emp_pkg IS

              CREATE PROCEDURE update_sal(name VARCHAR2,newsal NUMBER)

              IS

              BEGIN

                  UPDATE emp SET sal = newsal

                  WHERE lower(ename) = lower(name);

              END;

 

              CREATE FUNCTION annual_income(name VARCHAR2)

              RETURN NUMBER IS

                   annual_salary NUMBER(7,2);

              BEGIN

                   SELECT sal*12+nvl(comm,0) INTO annual_salary

                   FROM emp WHERE lower(ename) = lower(name);

                   RETURN annual_salary;

              END;

           END;

 

調用包的過程和函數時,在過程和函數名之前必須要帶有包名作爲前綴(包名.子程序名),如果要訪問其他方案的包,還必須加方案作爲前綴(方案名.包名.子程序名)

 

    SQL>call emp_pkg.update_sal('scott',1500);

    SQL>VAR income NUMBER;

    SQL>call emp_pkg.annual_income('scott') INTO :income;

    SQL>PRINT income

 

觸發器 :是用於隱含執行的存儲過程,當定義觸發器時,必須要觸發事件和觸發操作,常用的觸發事件包括INSERT、UPDATE、DELETE語句,而出發操作實際是一個PL/SQL塊,在SQL*PLUS中,可以使用CREATE TRIGGER命令來完成。

 

 

 

PL/SQL數據類型:在編寫PL/SQL程序時,可以使用標量類型、複合類型、參照類型、LOB類型。

 

   

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章