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

Oracle觸發(fā)器詳解

系統(tǒng) 3284 0

觸發(fā)器是特定事件出現(xiàn)的時候,自動執(zhí)行的代碼塊。類似于存儲過程,觸發(fā)器與存儲過程的區(qū)別在于:存儲過程是由用戶或應(yīng)用程序顯式調(diào)用的,而觸發(fā)器是不能被直接調(diào)用的。

1.觸發(fā)器組成:?

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

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

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

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

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

觸發(fā)頻率:說明觸發(fā)器內(nèi)定義的動作被執(zhí)行的次數(shù)。即語句級 (STATEMENT) 觸發(fā)器和行級 (ROW) 觸發(fā)器。

?

2. 觸發(fā)器的類型:

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

行級 (ROW) 觸發(fā)器:是指當(dāng)某觸發(fā)事件發(fā)生時,對受到該操作影響的每一行數(shù)據(jù),觸發(fā)器都單獨(dú)執(zhí)行一次。

DML觸發(fā)器 ORACLE 可以在 DML 語句進(jìn)行觸發(fā),可以在 DML 操作前或操作后進(jìn)行觸發(fā),并且可以對每個行或語句操作上進(jìn)行觸發(fā)。

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

系統(tǒng)觸發(fā)器 ORACLE 8i 提供了第三種類型的觸發(fā)器叫系統(tǒng)觸發(fā)器。它可以在 ORACLE 數(shù)據(jù)庫系統(tǒng)的事件中進(jìn)行觸發(fā),如 ORACLE 系統(tǒng)的啟動與關(guān)閉等。

?

3. 創(chuàng)建觸發(fā)器的一般語法:

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 子句說明相關(guān)名稱,在行觸發(fā)器的PL/SQL塊和WHEN 子句中可以使用相關(guān)名稱參照當(dāng)前的新、舊列值,默認(rèn)的相關(guān)名稱分別為OLD和NEW。觸發(fā)器的PL/SQL塊中應(yīng)用相關(guān)名稱時,必須在它們之前加冒號(:),但在WHEN子句中則不能加冒號。 不同類型的觸發(fā)器 ( DML 觸發(fā)器、 INSTEAD OF 觸發(fā)器、系統(tǒng)觸發(fā)器 ) 的語法格式和作用有較大區(qū)別。

?

4.dml觸發(fā)器示例 限定只對部門號為80的記錄進(jìn)行行觸發(fā)器操作

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觸發(fā)器詳解

Oracle觸發(fā)器詳解


更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯(lián)系: 360901061

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

【本文對您有幫助就好】

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

發(fā)表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 国产真实乱xxxav | 伊人色婷婷综在合线亚洲 | 日韩精品久久久毛片一区二区 | 午夜久久久久久久 | 99久久国产综合精品五月天 | 99热这里只有精品66 | 天天拍拍天天爽免费视频 | 国产精品欧美一区二区 | 欧美黄视频在线观看 | 狠狠躁天天躁夜夜躁婷婷 | 日韩欧美亚洲一区精选 | 日韩美女强理论片 | 九色蝌蚪自拍 | 色综合成人网 | 欧美成人黄色网 | 黄色不良视频 | 亚洲最大在线观看 | 久久频这里精品香蕉久久 | 精品国产免费第一区二区三区日韩 | 亚洲精品成人一区二区www | 国产精品综合一区二区 | 免费色视频网站 | 一区二区三区美女视频 | 男人看的网址 | 九九久久精品这里久久网 | 国产四虎 | 亚洲欧美一区二区三区国产精品 | 国产成人黄色在线观看 | 99在线精品国产不卡在线观看 | 色网址在线观看 | 国产91在线 | 欧美 | 亚洲国产精品一区二区九九 | 亚洲日本中文字幕 | 九色综合久久综合欧美97 | 草视频在线观看 | 亚洲日韩精品欧美一区二区一 | 日本一级黄色毛片 | 一级a毛片免费观看久久精品 | 久cao在线观看视频 久re这里只有精品最新地址 | 亚洲欧美日韩一区 | 亚欧洲精品bb |