Click here to view and discuss this page in DocCommentXchange. In the future, you will be sent there automatically.

SQL Anywhere 12.0.0 (中文) » SQL Anywhere 服务器 - 数据库管理 » 维护数据库 » 使用调度和事件自动完成任务 » 调度和事件内部

 

事件处理程序是如何执行的

当触发事件处理程序时,会建立一个可在其上执行事件处理程序的临时内部连接。处理程序不是在导致处理程序触发的连接上执行的,因此诸如 MESSAGE ...TO CLIENT 之类与客户端应用程序进行交互的语句在事件处理程序内是没有意义的。同样,也不允许会返回结果集的语句。

用于执行处理程序的临时连接不计入授权的连接限制,不会为 login_procedure 选项指定的过程执行事件连接。

创建事件需要有 DBA 权限,而执行事件则需要有其创建者的权限。如果您希望事件处理程序以非 DBA 权限执行,则可以从处理程序内调用过程,因为存储过程以其创建者的权限运行。

任何事件错误都会记录到数据库服务器消息日志中。

事件处理程序和错误

如果在执行期间未检测到任何错误,则将提交事件处理程序中的事务。如果检测到错误,将回退。

如果错误出现在原子复合语句内且该语句具有可处理该错误的异常处理程序,则在该语句中所进行的任何更改均将保持未完成状态。如果异常处理程序不处理错误或导致另一错误(包括通过 RESIGNAL),则在原子复合语句内所做的更改会被撤消。