我的最新补丁中有一个主要问题。 更新条件不完整,我更新了多行 不小心。
我现在要做的是通过设置约束来防止这种情况 我尝试更新多个时会导致异常的表格 行。可选择使用特定参数。
有没有办法在oracle 11.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,则引发异常。整个声明将被回滚。
这对于并发也是安全的,因为包变量是“存储”的会话级别。