防止在oracle db中更新多行

时间:2015-11-05 10:14:15

标签: oracle constraints

我的最新补丁中有一个主要问题。 更新条件不完整,我更新了多行 不小心。

我现在要做的是通过设置约束来防止这种情况 我尝试更新多个时会导致异常的表格 行。可选择使用特定参数。

有没有办法在oracle 11.2中执行此操作?

2 个答案:

答案 0 :(得分: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 AFTER EACH ROW;
END TABLE1_FAIL_MULT_UPDATES_TRG;

You can read further on compound triggers here

祝你好运。

答案 1 :(得分:0)

您可以使用此question上的答案提供包含三个触发器和包变量的解决方案来计算受影响的行数。在第三个触发器中,如果行数大于1,则引发异常。整个声明将被回滚。

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