我將在 oracle 中創建一個洗掉前觸發器,在該觸發器中我需要知道要洗掉多少條記錄,如果洗掉行數超過閾值(并且可能取消洗掉),讓我向用戶發送訊息
問題是如何獲取洗掉行數以進行檢查?
謝謝你的幫助
uj5u.com熱心網友回復:
一條洗掉陳述句可以影響許多行。您可以在四個事件上放置觸發器:
- before 陳述句,您所知道的就是將發生 0 到 n 次洗掉
- 在每一行之前,您只會看到即將被洗掉的一行
- 在每一行之后你只能再次看到那一行
- after 陳述句,您所知道的就是發生了 0 到 n 次洗掉
因此,這些觸發器型別都不能單獨幫助您完成任務。您想要的是一個復合觸發器,您可以在其中計算每個行部分之前或之后受影響的行,并查看after 陳述句部分中的總數。
CREATE OR REPLACE TRIGGER trg_check_max_deletes
FOR DELETE ON mytable COMPOUND TRIGGER
v_count INTEGER := 0;
AFTER EACH ROW IS
BEGIN
v_count := v_count 1;
END AFTER EACH ROW;
AFTER STATEMENT IS
BEGIN
IF v_count > 3 THEN
RAISE_APPLICATION_ERROR(-20000, 'You are not allowed to delete more than 3 rows at once.');
END IF;
END AFTER STATEMENT;
END trg_check_max_deletes;
演示:https ://dbfiddle.uk/?rdbms=oracle_21&fiddle=ba801c67c9e63eadaff1f233debacc00
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/472561.html
