我有一个INSERT
会触发TRIGGER
,UPDATE
将TABLE
另一个INSERT
上的属性。我需要确保如果UPDATE
成功且TRIGGER
内的INSERT
不成功,那么整个事情应该回滚。
在事务中封装global Example
Example = 5
是否可以保证这一点?
如果没有,我该怎么做?
答案 0 :(得分:2)
触发器是包含原始INSERT
。
事务中的任何错误(未处理)都会导致整个事务回滚,就像从未发生过一样。这将包括导致触发器运行的INSERT
。
所以你不需要做任何事情;它会以你想要的方式工作。
您可以通过设置SAVEPOINT
并使用ROLLBACK TO SAVEPOINT
(或使用PL / pgSQL中的BEGIN ... EXCEPTION ... END
块来显式处理事务内部的错误,这在块下也是如此)。
要触发异常,请运行导致错误的SQL语句(如SELECT 1/0
)或使用PL / pgSQL中的RAISE EXCEPTION
语句(其他过程语言也有类似的方法)。< / p>