簡體   English   中英

如何使用 if 語句在表上觸發刪除操作?

[英]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;

任何人都知道發生了什么?

提前致謝

那么你的問題是:“有人知道發生了什么嗎??”。 所以我會盡量回答這個問題。

  1. 在觸發器代碼的開頭,您有一些不需要的代碼:

     BEFORE INSERT or UPDATE OR INSERT OF status ON TABLE_1

    這就足夠了:

     BEFORE INSERT or UPDATE OF status ON TABLE_1
  2. 然后在您的觸發器中,第一個DELETE命令正常,第二個則不是,因為 eexist 子句中的選擇不正常:

    檢查這個例子

  3. 為了幫助你更多,你需要告訴我你的計划是什么,第二個 DELETE 子句。 你想完成什么? 是表的“interference_results”名稱還是?

希望這對現在有幫助......

您是否偶然查詢了插入到 TABLE_1 中的相同記錄? 如果是這樣,“BEFORE”觸發器將不會執行,因為尚未創建記錄。 或者,使用相關 DML 中的實際 :NEW 值。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM