首页 > 解决方案 > ORA-04092: 无法在触发器中回滚

问题描述

当有更新导致总余额低于 -100 时,我创建了一个触发器来引发错误。我还需要触发器来阻止更新发生。我收到错误报告,但无法回滚更新。

CREATE OR REPLACE TRIGGER SOLUTION2

AFTER UPDATE OF balance ON ACCOUNT
DECLARE 
    balance_sum NUMBER(9,2);

BEGIN
    balance_sum := 0;

    SELECT SUM(balance)
      INTO balance_sum 
      FROM ACCOUNT 
     WHERE balance < 0 
     GROUP BY bank_name
    HAVING SUM(balance) < -100;

    IF (balance_sum != 0) THEN 
        RAISE_APPLICATION_ERROR(-20001, 'The total value of balance on all bank accounts located in a bank and such that the balance of the accounts is negative, cannot be less than -100'); 
    END IF;

EXCEPTION 
    WHEN no_data_found THEN
        dbms_output.put_line('Balance is updated!');
    WHEN OTHERS THEN 
        dbms_output.put_line(SQLERRM);

END;
/

标签: oraclerollback

解决方案


推荐阅读