天天看點

pl/sql(2)

1.存儲過程

文法:

文法解析:

IN:輸入參數。

OUT:輸出參數;

IN OUT:就可以輸入也可輸出的參數;

datatype:參數的資料類型。此處不能帶精度。

:=|DEFAULT:用于設定參數的預設值。

     例1:

pl/sql(2)
pl/sql(2)
pl/sql(2)
pl/sql(2)

          過程調用

pl/sql(2)

      (3) 删除過程

   2.函數

過程用來完畢一項任務,可能不傳回值,也可能傳回多個值,過程的調用是一條PL/SQL語句;函數包括RETURN子句,用來進行資料操作,并傳回一個單獨的函數值,函數的調用僅僅能在一個表達式中。

例:

pl/sql(2)

調用函數:

pl/sql(2)

    3.程式包中的遊标

        遊标的定義分為遊标規範和遊标主體兩部分

         在包規範中聲明遊标規範時必須使用 RETURN 子句指定遊标的傳回類型

         RETURN子句指定的資料類型能夠是:

                  用 %ROWTYPE 屬性引用表定義的記錄類型

                  程式猿定義的記錄類型

例1:

pl/sql(2)

調用

pl/sql(2)

例2:

實作增删查改:

pl/sql(2)

       4.觸發器

        觸發器分為 DML 觸發器、 INSTEAD OF 觸發器、DDL 觸發器和系統觸發器三種類型

        DML 觸發器包含行級觸發器、語句級觸發器

(2)觸發器的功能:

                   自己主動生成資料

                   自己定義複雜的安全權限

針對周六日不能進行改動資料庫:

pl/sql(2)
pl/sql(2)

測試:

pl/sql(2)

                   提供審計和日志記錄

                   啟用複雜的業務邏輯

(3)行級觸發器:

用觸發器實作自增的主鍵:

pl/sql(2)

1.

pl/sql(2)

2.效率高

pl/sql(2)

3.效率低

pl/sql(2)

(4)文法解析:

INSTEAD OF:僅用于替代觸發器,即event_target必須為視圖,并且必須帶FOR EACH ROW子句

trigger_event:觸發的事件。能夠是DML事件(INSERT、UPDATE、DELETE、INSERT OR UPDATE、UPDATE OF column_name),系統事件(STARTUP、SHUTDOWN等)。

event_target:即指trigger_event事件是發生在哪個對象上的。如DML事件,那麼event_target應該是表名或視圖名,假設是系統事件,那麼event_target就應該是DATABASE或SCHEMA

FOR EACH ROW:假設帶此子句。即表示該觸發器是行級觸發器。假設省略,則是語句級觸發器。

WHEN condition :用于限制行級觸發器,僅僅有滿足condition條件,才會觸發觸發器。

觸發器有ENABLED和DISABLED兩種狀态。

改動某個觸發器的狀态能夠運作以下的SQL:

使某個表上的全部觸發器有效或無效: