如何在oracle中删除触发器之前删除行数

how to get deleting rows count in before delete trigger in oracle

我打算在 oracle 中创建一个删除前触发器,我需要知道有多少记录将被删除,如果删除行的数量超过阈值(也许取消删除)

问题是如何得到删除的行数来进行检查?

感谢您的帮助

一个删除语句可以影响很多行。您可以在四个事件上放置触发器:

  • before statement 你所知道的是将要进行 0 到 n 次删除
  • 在每一行之前,您只看到一行即将被删除
  • 在每一行之后 你只再次看到那一行
  • 语句后 你只知道发生了 0 到 n 次删除

因此,仅 none 这些触发器类型就可以帮助您完成任务。您想要的是一个复合触发器,您可以在其中计算 beforeafter each row 部分中受影响的行,并查看总数声明 部分之后。

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