oacle中的触发器是请求的一部分吗?

lskq00tm  于 2021-08-09  发布在  Java
关注(0)|答案(2)|浏览(312)

我使用spring存储库和oracledb。我有一个表并触发insert/update/delete。如果我对表执行一些insert/delete/update,并触发一个sql错误(锁定的资源或其他东西),那么存储库方法会出现异常吗?或者oracle触发器作为insert/delete/update语句的独立部分执行?

qncylg1j

qncylg1j1#

我不知道SpringRepository,但我知道在—例如:oracle窗体、ApplicationExpress、报表—中,触发器错误会一直向上传播。在那种情况下一切都停止了。
假设我有一个表单并输入一些数据。数据库触发器触发并尝试执行它所做的任何操作,但失败了 raise_application_error . 什么都没有完成,我在表单中看到一个错误,例如“ora-20001:我的自定义错误”。
因此,我想你在Spring也会有同样的经历。毕竟,测试它不会花很多钱,对吧?如果我能的话我会的,但我不能自己做。

monwx1rj

monwx1rj2#

当您尝试向表中插入数据时,您的spring存储库将出错。如果关联触发器中存在任何错误,则不会执行dml命令。
大多数情况下,我在plsql过程中使用dml进行insert,并使用get\u locked\u transaction()过程检查是否有任何资源正忙。
函数get\u locked\u transaction(p\u wip\u entity\u id in number,p\u production\u note\u number in number)返回boolean is row\u locked exception;pragma exception\u init(行锁定,-54);开始/cursor with nowait attribute/for cc in(select*from mytable where wip\u entity\u id=p\u wip\u entity\u id for update nowait)循环为空;末端回路;返回false;行锁定时异常,然后返回true;结束get\ U locked\事务;

相关问题