我在最新补丁中有一个重大问题。更新条件不完整,我更新了多行偶然地。
我现在想做的是通过为只要我尝试更新多个表,就会导致异常行。 (可选)具有特定参数。
在Oracle 11.2中是否有办法做到这一点?
您可以通过使用复合触发器来完成此操作:
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。
祝你好运。
您可以在此question上使用答案,该答案提供了具有三个触发器和程序包变量的解决方案来计算受影响的行数。在第三个触发器中,如果行数大于一,则引发异常。整个语句将回滚。
这对于并发也是安全的,因为包变量是“存储的”会话级别。