DECLARE EXIT HANDLER FOR SQLEXCEPTION ROLLBACK
是“假设”在事务之前使用,以便在失败时显式设置值。
但是,documentation表明这或多或少是默认行为?
如果发生没有声明处理程序的条件,则采取的操作取决于条件类:
对于SQLEXCEPTION条件,存储的程序终止于引发条件的语句,就好像有一个EXIT处理程序一样。如果程序被另一个存储程序调用,则调用程序使用应用于其自己的处理程序的处理程序选择规则来处理该条件。
但这意味着永远不会调用COMMIT
,因此,与没有处理程序的效果相同。
我不确定如何解释。听起来像“显而易见”的事情就是退出存储的程序,但是如果一个调用程序让处理程序告诉其他事情 - 也许是DECLARE EXIT HANDLER FOR SQLEXCEPTION CONTINUE
- 我不清楚内部存储的程序是否继续,或者“处理程序选择规则”一般是什么。
如果这个(对我来说很奇怪)解释就是这种情况,那么这意味着如果假设存储的程序可以假设它从未被另一个存储的程序调用,那么处理程序是无关紧要的,但它确保了一致的行为