在 DB2 SQL 中,如何终止已经陷入无限循环的递归函数调用……?
In DB2 SQL, how can I kill a recursive function call that's already stuck in an infinite loop..?
如果我有一个递归的 DB2 SQL 过程或函数,或者它有一个棘手的循环,并且该进程已经变成无限的,如果它已经 运行 我该如何终止它。 ?这是 DB2-for-i v7.3,在 DBeaver SQL.
中开发
在 SQL IDE.. 中简单地取消查询就足够了吗?过去,我曾通过过长的查询这样做过,而且我总是收到 "Query has been cancelled" 的通知。但是对于一个无限循环或递归的过程,是否存在任何风险,该过程可能仍会在后台继续,直到发生崩溃并且 DBA 工作人员用干草叉和燃烧的火炬敲打我的门..?
编辑:有人建议我的问题与 this one 重复,但我在 post 之前阅读了那个问题,但它并不相同。这个问题首先是如何防止无限循环发生,但我的问题是如何终止已经发生的无限循环。
通过某种方式在循环中构建取消以退出长 运行 循环。
——例如检查 table.
中是否存在任何行
loop...
set myexit = (select myexit from myexit fetch first 1 rows only);
if myexit is not null then return;
endloop...
也许会有一些更好的解决方案。
取消应该可行,但如果您可以在 WRKACTJOB 中找到合适的工作,那么您可以使用 OPTION(*IMMED) 结束它。
服务器作业应在子系统 QUSRWRK 中,并命名为 QZDASOINIT。您要查找的那个将具有您的用户标识,如果它正在循环,它将具有 运行 的状态。这些工作在等待工作时通常会留在 TIMW。这些是预启动作业,如果您手动结束一个作业,它会在需要时返回。
如果我有一个递归的 DB2 SQL 过程或函数,或者它有一个棘手的循环,并且该进程已经变成无限的,如果它已经 运行 我该如何终止它。 ?这是 DB2-for-i v7.3,在 DBeaver SQL.
中开发在 SQL IDE.. 中简单地取消查询就足够了吗?过去,我曾通过过长的查询这样做过,而且我总是收到 "Query has been cancelled" 的通知。但是对于一个无限循环或递归的过程,是否存在任何风险,该过程可能仍会在后台继续,直到发生崩溃并且 DBA 工作人员用干草叉和燃烧的火炬敲打我的门..?
编辑:有人建议我的问题与 this one 重复,但我在 post 之前阅读了那个问题,但它并不相同。这个问题首先是如何防止无限循环发生,但我的问题是如何终止已经发生的无限循环。
通过某种方式在循环中构建取消以退出长 运行 循环。
——例如检查 table.
中是否存在任何行loop...
set myexit = (select myexit from myexit fetch first 1 rows only);
if myexit is not null then return;
endloop...
也许会有一些更好的解决方案。
取消应该可行,但如果您可以在 WRKACTJOB 中找到合适的工作,那么您可以使用 OPTION(*IMMED) 结束它。
服务器作业应在子系统 QUSRWRK 中,并命名为 QZDASOINIT。您要查找的那个将具有您的用户标识,如果它正在循环,它将具有 运行 的状态。这些工作在等待工作时通常会留在 TIMW。这些是预启动作业,如果您手动结束一个作业,它会在需要时返回。