oracle - 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;
/
解决方案
推荐阅读
- java - Neo4j 嵌入式图 java 可视化
- python - Python:- 如何从 Excel 创建 Csv(针对特定列)
- c++ - 如何在 C++ 中实现切片运算符 []?
- ios - Paypal IOS SDK 中的用户凭据无效
- python - Django ListView 中当前用户对象的列表
- regex - 获得 SSH 攻击者的唯一 IP 范围的前 20 名列表,最后用 .0 对它们进行排序。可能的?
- python - 使用 django-taggit 时导入错误 add_lazy_relation
- html - HTML时间的时间格式 所有浏览器都支持输入类型
- php - 使用 mysql 的 INTERVAL 和准备好的语句
- java - 如何为字符串的数字和字符设置不同的颜色和大小