国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 數據庫 > Oracle > 正文

oracle文檔第九章觸發器(1)

2024-08-29 13:53:46
字體:
來源:轉載
供稿:網友
第九章節 :觸發器編碼

    觸發器是存儲在數據庫存中隱式的運行或者被觸發的一段程序,當某些事件發生。通常情況下,觸發器中支持可執行的一段pl/sql代碼塊,當一個insert,update,或者delete命名發生在一個表或者視圖上的時候。其也支持系統和數據庫或者方案事件.Oracle數據庫也支持觸發器中含有可執行的pl/sql或java程序.

    該章節討論dml觸發器,instead of 觸發器和系統觸發器(數據庫/方案觸發器),內容如下:

設計觸發器
創建觸發器
觸發器核心代碼
編譯觸發器
修改已有的觸發器
(enabling and disabling triggers)使用和[disabling]角發器
查看觸發器相關的信息
觸發器實例代碼
用觸發器響應[responding]系統事件
     9.1設計觸發器

         在設計觸發器時,使用下列設計原則

觸發器用來保證當一個特定的操作被執行時,和該操作相關的動作也被執行。
當一個重復[duplicate]功能在數據庫中存在,此時要避免使用觸發器。例如,如果能用數據完敕性約束來實現維不合法的數據存儲到數據庫時,就沒有必要使用觸發器來實現相同的功能。[refect]拒絕
限制觸發器程序代碼的大小,如果觸發器的實現邏輯需要超過60行代碼,那么最好把大量的代碼存儲在一個存儲過程中,然后在觸發器中調用該存儲過程。
regardless of[無論] 無論是用戶或者數據庫[issues]觸發器事件,觸發器是僅僅用來[centralized]集中公共的操作被調用。
不要創建[recursive]遞歸性的觸發器。如,創建一個在Emp_tab after update語名的觸發器,在該表中又定義了一個update 語句,使該觸發器遞補歸的被調用直到內存溢出。
要明知[judiciously]的用觸發器,它在每個用戶,任何時間被執行,當事件發生在已經定義好的觸發器上.
      9.2創建觸發器

          可以使用任何[interactive]互相交互的工具,如sql*plus 或enterPRise manager,用CREATE TRIGGER statement命令來創建.在使用交互工具編寫完觸發器時,在程序末尾加上('/')字符是[necessary]必要的,來使剛創建的觸發器激活[activate]。

        如下命令在emp_tab表上創建一個觸發器:

  CREATE OR REPLACE TRIGGER Print_salary_changes
      BEFORE DELETE OR INSERT OR UPDATE ON Emp_tab
      FOR EACH ROW
WHEN (new.Empno > 0)
DECLARE
    sal_diff number;
BEGIN
    sal_diff  := :new.sal  - :old.sal;
    dbms_output.put('Old salary: ' || :old.sal);
    dbms_output.put('  New salary: ' || :new.sal);
    dbms_output.put_line('  Difference ' || sal_diff);
END;
/

當dml操作(insert,update,delete 命令)在該表上時,該觸發器被觸發,你可以選擇組合方式觸發事件來觸發它。

因為該觸發器用了BEFOR關鍵字,它能在新值存儲表之間可以訪問新值或如果新值被表示有簡單的錯誤時,還能修改新值。

如果你想讓觸發器查詢或修改同樣表的數據時,可以用AFTER關鍵字。because triggers can only do that after the initial changes are applied and the table is back in a consistent state.

因為該觸發器用了FOR EACH ROW 從句,這可以被執行多次,如當更新或刪除多個行時.如你僅僅想記錄發生操作的the face,就可以[omit] 省略for each row關鍵字,但是不使用該數據為每行記錄.

一但,觸發器被創建,輸入下面sql命令

UPDATE Emp_tab SET sal = sal + 500.00 WHERE deptno = 10;當該觸發器一但被觸發,每行被更新,在打印從句,打印新的薪水,以前薪水,和它們之間的不同.如果在pl/sql塊中存在任何錯誤,create(或create或replace)命令執行失敗.  注:觸發器程序代碼的大小不能超過32kb;

下面部分使用實例來[illustrate]說明觸發器部分使用方法

  看其它:

   "Examples of Trigger applications" for more realistic examples of CREATE TRIGGER statements



9.2.1 觸發器類型

  觸發器可以包含pl/sql塊,或一個pl/sql,c或java程序和表,視圖,方案或數據庫自身關聯.

當一個特殊事件發生,Oracle數據自動執行觸發器,[ which may be in the form of a system event or a DML statement being issued against the table.]

觸發器作用對象:

l          Dml觸發器作用在表

l          Instead of 觸發器可以作用在視圖

l          System 觸發器作用在數據庫/方案.用database,觸發器觸發每個事件為所有用戶,用Schem,觸發器被特定的用戶觸發

See also:

  Oracle Database SQL Reference for information on trigger creation syntax

9.2.2 系統事件

   你可以創建下列任何事件來觸發的觸發器
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 定西市| 定州市| 扬州市| 湖南省| 通道| 城固县| 嘉定区| 江孜县| 宝应县| 广宗县| 聂拉木县| 方山县| 刚察县| 延庆县| 邹城市| 沂水县| 旬阳县| 茶陵县| 怀来县| 高要市| 盐城市| 福泉市| 广宗县| 舒兰市| 祁阳县| 梧州市| 个旧市| 曲松县| 琼海市| 衡东县| 临漳县| 玛多县| 柳江县| 扎兰屯市| 分宜县| 叶城县| 崇仁县| 玛纳斯县| 获嘉县| 六盘水市| 息烽县|