[英]How can I trigger a delete action on a table with an if-statement?
我正在為個人項目開發這個觸發器,但我不確定我做錯了什么。 觸發器編譯得很好,測試觸發器應該做什么,它可以工作......但條件不起作用。 觸發器什么都不做
這是我的代碼
CREATE OR REPLACE TRIGGER z_delete
BEFORE INSERT or UPDATE OR INSERT OF status ON TABLE_1
FOR EACH ROW
BEGIN
IF (:new.condition_1 = 'I' or :new.condition_2 ='Z')
THEN
DELETE TABLE_2 WHERE EXISTS
(SELECT * FROM TABLE_1 WHERE TABLE_1.Value_1 = TABLE_2.Value_2 AND TABLE_1.condition_1='I');
DELETE interference_results WHERE EXISTS
(SELECT * FROM TABLE_1 WHERE TABLE_1.Value_1 = TABLE_2.Value_3 AND TABLE_1.condition_1 = 'I');
END IF;
END z_delete;
任何人都知道發生了什么?
提前致謝
那么你的問題是:“有人知道發生了什么嗎??”。 所以我會盡量回答這個問題。
在觸發器代碼的開頭,您有一些不需要的代碼:
BEFORE INSERT or UPDATE OR INSERT OF status ON TABLE_1
這就足夠了:
BEFORE INSERT or UPDATE OF status ON TABLE_1
然后在您的觸發器中,第一個DELETE
命令正常,第二個則不是,因為 eexist 子句中的選擇不正常:
為了幫助你更多,你需要告訴我你的計划是什么,第二個 DELETE 子句。 你想完成什么? 是表的“interference_results”名稱還是?
希望這對現在有幫助......
您是否偶然查詢了插入到 TABLE_1 中的相同記錄? 如果是這樣,“BEFORE”觸發器將不會執行,因為尚未創建記錄。 或者,使用相關 DML 中的實際 :NEW 值。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.