亚洲免费在线-亚洲免费在线播放-亚洲免费在线观看-亚洲免费在线观看视频-亚洲免费在线看-亚洲免费在线视频

Oracle觸發器詳解

系統 3754 0

觸發器是特定事件出現的時候,自動執行的代碼塊。類似于存儲過程,觸發器與存儲過程的區別在于:存儲過程是由用戶或應用程序顯式調用的,而觸發器是不能被直接調用的。

1.觸發器組成:?

觸發事件:引起觸發器被觸發的事件。 例如: DML 語句 (INSERT, UPDATE, DELETE 語句對表或視圖執行數據處理操作 ) DDL 語句(如 CREATE ALTER DROP 語句在數據庫中創建、修改、刪除模式對象)、數據庫系統事件(如系統啟動或退出、異常錯誤)、用戶事件(如登錄或退出數據庫)。

觸發時間:即該 TRIGGER 是在觸發事件發生之前( BEFORE )還是之后 (AFTER) 觸發,也就是觸發事件和該 TRIGGER 的操作順序。

觸發操作:即該 TRIGGER 被觸發之后的目的和意圖,正是觸發器本身要做的事情。 例如: PL/SQL 塊。

觸發對象:包括表、視圖、模式、數據庫。只有在這些對象上發生了符合觸發條件的觸發事件,才會執行觸發操作。

觸發條件:由 WHEN 子句指定一個邏輯表達式。只有當該表達式的值為 TRUE 時,遇到觸發事件才會自動執行觸發器,使其執行觸發操作。

觸發頻率:說明觸發器內定義的動作被執行的次數。即語句級 (STATEMENT) 觸發器和行級 (ROW) 觸發器。

?

2. 觸發器的類型:

語句級 (STATEMENT) 觸發器:是指當某觸發事件發生時,該觸發器只執行一次;

行級 (ROW) 觸發器:是指當某觸發事件發生時,對受到該操作影響的每一行數據,觸發器都單獨執行一次。

DML觸發器 ORACLE 可以在 DML 語句進行觸發,可以在 DML 操作前或操作后進行觸發,并且可以對每個行或語句操作上進行觸發。

替代觸發器 :由于在 ORACLE 里,不能直接對由兩個以上的表建立的視圖進行操作。所以給出了替代觸發器。它就是 ORACLE 8 專門為進行視圖操作的一種處理方法。

系統觸發器 ORACLE 8i 提供了第三種類型的觸發器叫系統觸發器。它可以在 ORACLE 數據庫系統的事件中進行觸發,如 ORACLE 系統的啟動與關閉等。

?

3. 創建觸發器的一般語法:

CREATE?[OR?REPLACE]?TRIGGER?trigger_name
{BEFORE?|?AFTER?}
{INSERT?|?DELETE?|?UPDATE?[OF?column?[,?column?…]]}
[OR?{INSERT?|?DELETE?|?UPDATE?[OF?column?[,?column?…]]}...]
ON?[schema.]table_name?|?[schema.]view_name?
[REFERENCING?{OLD?[AS]?old?|?NEW?[AS]?new|?PARENT?as?parent}]
[FOR?EACH?ROW?]
[WHEN?condition]
PL/SQL_BLOCK?|?CALL?procedure_name;

REFERENCING 子句說明相關名稱,在行觸發器的PL/SQL塊和WHEN 子句中可以使用相關名稱參照當前的新、舊列值,默認的相關名稱分別為OLD和NEW。觸發器的PL/SQL塊中應用相關名稱時,必須在它們之前加冒號(:),但在WHEN子句中則不能加冒號。 不同類型的觸發器 ( DML 觸發器、 INSTEAD OF 觸發器、系統觸發器 ) 的語法格式和作用有較大區別。

?

4.dml觸發器示例 限定只對部門號為80的記錄進行行觸發器操作

CREATE ? OR ? REPLACE ? TRIGGER ?tr_emp_sal_comm
BEFORE?
UPDATE ? OF
?salary,?commission_pct
???????
OR ? DELETE

ON ?HR.employees
FOR
?EACH?ROW
WHEN ?(old.department_id? = ? 80
)
BEGIN

?
CASE
?????
WHEN ?UPDATING?( 'salary' )? THEN
????????
IF ?:NEW.salary? < ?:old.salary? THEN
???????????RAISE_APPLICATION_ERROR(
- 20001 ,? ' 部門 80 的人員的工資不能降 ' );
????????
END ? IF
;
?????
WHEN ?UPDATING?( 'commission_pct' )? THEN

????????
IF ?:NEW.commission_pct? < ?:old.commission_pct? THEN
???????????RAISE_APPLICATION_ERROR(
- 20002 ,? ' 部門 80 的人員的獎金不能降 ' );
????????
END ? IF
;
?????
WHEN ?DELETING? THEN

??????????RAISE_APPLICATION_ERROR(
- 20003 ,? ' 不能刪除部門 80 的人員記錄 ' );
?????
END ? CASE
;
END ;?

?

Oracle觸發器詳解

Oracle觸發器詳解


更多文章、技術交流、商務合作、聯系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 国产午夜久久精品 | 欧美日韩综合在线视频免费看 | 国产福利视频在线播放 | 中国jizz日本| 国产亚洲亚洲精品777 | 色好看在线视频播放 | 国产精品日韩欧美一区二区三区 | 国内精品免费一区二区三区 | 四虎影院久久 | 精品国产一区二区三区www | 欧美一级a俄罗斯毛片 | 久久这里只精品 | 久久影视网 | 国产综合久久久久久鬼色 | 92精品国产自产在线观看 | 欧美性xxx免费看片 欧美性白人顶级hd 欧美性插视频 | 老年人一级特黄aa大片 | 国产精品入口麻豆午夜 | 欧美激情一区二区三级高清视频 | a视频在线看| 九九视频免费观看 | 视频二区 素人 欧美 日韩 | 午夜一级成人 | 九九亚洲精品自拍 | 亚洲va欧美va国产综合久久 | 新26uuu在线亚洲欧美 | 午夜在线观看网站 | 免费一级片在线 | 久热官网 | 亚洲日产综合欧美一区二区 | 亚洲乱码一区二区三区国产精品 | 欧美不卡视频在线 | 中文字幕亚洲欧美 | 欧美与黑人午夜性猛交久久久 | 两性视频久久 | 久久久噜噜噜久噜久久 | 麻豆射区 | 久久精品亚洲日本波多野结衣 | 久久久久久人精品免费费看 | 国产成人亚洲精品 | 国产亚洲新品一区二区 |