日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

DML触发器

發(fā)布時(shí)間:2025/4/9 编程问答 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 DML触发器 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

DML觸發(fā)器:是一種用在 表 上的觸發(fā)器,通常在 insert,Update, delete語(yǔ)句上應(yīng)用。

如果觸發(fā)器僅影響一行,則觸發(fā)器執(zhí)行順序:

(1)before 語(yǔ)句觸發(fā)器

(2)before 行級(jí)觸發(fā)器

(3)執(zhí)行 DML語(yǔ)句

(4)after 行級(jí)觸發(fā)器

(5)after 語(yǔ)句觸發(fā)器

?

如果觸發(fā)器影響多行,則觸發(fā)器執(zhí)行順序:

(1)before語(yǔ)句觸發(fā)器

(2)被影響的第一行的before行觸發(fā)器

(3)第一行執(zhí)行DML語(yǔ)句

(4)第一行的after行級(jí)觸發(fā)器

(5)被影響的第二行的before行觸發(fā)器

(6)第二行執(zhí)行DML語(yǔ)句

(7)第二行的after行級(jí)觸發(fā)器

(8)after語(yǔ)句觸發(fā)器

?

語(yǔ)法:

1 create or replace trigger [schema.]trigger_name 2 {before | after} {delete | insert | {update [of column_list]}} on [schema.]table --觸發(fā)時(shí)機(jī) 3 [referencing {OLD as old_name} | {NEW as new_name} | {Parent as parent_name}] --定義OLD、NEW的別名 4 [For each row]                                        --行級(jí)觸發(fā)器 or 語(yǔ)句級(jí) 5 [When (condition)]                                     --觸發(fā)器被觸發(fā)后,是否執(zhí)行觸發(fā)體代碼的條件 6 plsql_clock | call_procedure_statement                        

其中,(1)before | after:指定觸發(fā)器是在對(duì)表的操作發(fā)生之前觸發(fā)還是之后觸發(fā)。

 可以同時(shí)指定多個(gè)動(dòng)作,

1 before delete or insert or update on tb_test

 在使用Update作為觸發(fā)行為時(shí),還可以使用 Update of 指定一個(gè)或多個(gè)字段,僅在這些字段被更新時(shí)才會(huì)觸發(fā):

1 before update of column1, column2 ON tb_test

(2)when condition : 只有滿足when指定的條件,才會(huì)執(zhí)行觸發(fā)體中的代碼。在when子句中,可以使用以下幾個(gè)謂詞:

  OLD 謂詞:執(zhí)行前的字段的值的名稱,比如 Update一個(gè)表時(shí),使用 OLD.column1 是指執(zhí)行Update操作之前的列的值。

  NEW 謂詞:執(zhí)行后的字段的值的名稱,比如 Update一個(gè)表時(shí),使用 NEW.column1是指執(zhí)行 Update操作之后的列的值。

? ? ? 在觸發(fā)器內(nèi)部使用NEW和OLD謂詞時(shí),要在前面加上 :冒號(hào),在WHEN子句中,可以不加上冒號(hào)。

(3)可以在觸發(fā)器體的語(yǔ)句塊中使用 INSERTING、UPDATING、DELETING謂詞,這些謂詞會(huì)返回相應(yīng)的DML操作的布爾值,

  如果為TRUE,則表示執(zhí)行了相應(yīng)的 INSERT、UPDATE、DELETE操作。

?

eg:

create or replace trigger tr_emp_test before insert or update or delete ON employee referencing old as old_name new as new_name for each row when(new_name.emp_name > old_name.emp_name) DECLAREv_sal number; beginif deleting thennull;end if; end;

?

轉(zhuǎn)載于:https://www.cnblogs.com/ly01/p/8622387.html

總結(jié)

以上是生活随笔為你收集整理的DML触发器的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。