防止在oracle db中对多行进行更新

问题描述 投票:2回答:2

我在最新补丁中有一个重大问题。更新条件不完整,我更新了多行偶然地。

我现在想做的是通过为只要我尝试更新多个表,就会导致异常行。 (可选)具有特定参数。

在Oracle 11.2中是否有办法做到这一点?

oracle constraints
2个回答
4
投票

您可以通过使用复合触发器来完成此操作:

CREATE OR REPLACE TRIGGER TABLE1_FAIL_MULT_UPDATES_TRG
  FOR UPDATE ON TABLE1
COMPOUND TRIGGER
  nUpdate_count  NUMBER;

  BEFORE STATEMENT IS
  BEGIN
    nUpdate_count := 0;
  END BEFORE STATEMENT;

  BEFORE EACH ROW IS
  BEGIN
    IF UPDATING THEN
      nUpdate_count := nUpdate_count + 1;

      IF nUpdate_count > 1 THEN
        RAISE_APPLICATION_ERROR(-20100, 'Attempted to update more than 1 row');
      END IF;
    END IF;
  END BEFORE EACH ROW;

END TABLE1_FAIL_MULT_UPDATES_TRG;

You can read further on compound triggers here

祝你好运。


0
投票

您可以在此question上使用答案,该答案提供了具有三个触发器和程序包变量的解决方案来计算受影响的行数。在第三个触发器中,如果行数大于一,则引发异常。整个语句将回滚。

这对于并发也是安全的,因为包变量是“存储的”会话级别。

© www.soinside.com 2019 - 2024. All rights reserved.