В DB2 SQL, как я могу убить рекурсивный вызов функции, который уже застрял в бесконечном цикле? - PullRequest
1 голос
/ 19 сентября 2019

Если у меня есть процедура или функция DB2 SQL, которая является рекурсивной, или у нее сложный цикл, и процесс стал бесконечным, как я могу убить его, если он уже запущен?Это DB2-for-i v7.3, с разработкой в ​​DBeaver SQL.

Достаточно ли просто отменить запрос в SQL IDE ..?В прошлом я делал это с помощью слишком длинных запросов и всегда получал уведомление о том, что «запрос отменен».Но с бесконечной цикличностью или повторяющейся процедурой, есть ли риск, что процесс все еще может продолжаться в фоновом режиме, пока что-то не выйдет из строя, и сотрудники DBA не будут стучать в мою дверь с вилами и пылающими факелами ..?

РЕДАКТИРОВАТЬ:Было предложено, чтобы мой вопрос был дубликатом этого , но я прочитал его перед своим постом, и это не то же самое.Этот вопрос заключается в том, как предотвратить бесконечный цикл, но мой вопрос о том, как убить тот, который уже происходит.

Ответы [ 2 ]

1 голос
/ 20 сентября 2019

Отмена должна работать, но если вы можете найти правильную работу в WRKACTJOB, то вы можете просто завершить ее с помощью OPTION (* IMMED).

Задания сервера должны находиться в подсистеме QUSRWRK и называться QZDASOINIT.,У того, который вы ищете, будет свой идентификатор пользователя, и если он зациклен, у него будет статус RUN.Эти рабочие места сидят в TIMW обычно, когда они ждут работы.Это предварительные задания, и если вы завершите их вручную, они вернутся, если потребуется.

0 голосов
/ 20 сентября 2019

Построить отмену в цикле с помощью некоторых средств, чтобы выйти из цикла с длительным циклом.

- например, проверить, существуют ли какие-либо строки в таблице.

loop...
set myexit = (select myexit from myexit fetch first 1 rows only);
if myexit is not null then return;
endloop...

Может быть, лучшерешения приходят из этого.

...