Синтаксис времени ожидания для процедуры хранения db2 - PullRequest
0 голосов
/ 29 августа 2018

Для оракула мы можем использовать следующий синтаксис для сна

DBMS_LOCK.SLEEP(sleepTime);

Для mysql мы можем использовать следующий синтаксис для сна

DO SLEEP(sleepTime);

Для db2, как мне этого добиться? Следующее является частью моего сценария.

REPEAT
IF rowCount > 0
THEN

DO SLEEP (sleepTime);

END IF;
DELETE FROM IDN_OAUTH2_ACCESS_TOKEN WHERE TOKEN_STATE IN ('EXPIRED','INACTIVE','REVOKED') OR (TOKEN_STATE='ACTIVE');
GET DIAGNOSTICS rowCount = ROW_COUNT;
UNTIL rowCount=0 END REPEAT;

Как мы можем спать с db2?. Любая помощь в этом будет признательна

Ответы [ 2 ]

0 голосов
/ 03 сентября 2018

Попробуйте недокументированное call DBMS_ALERT.SLEEP(60)

0 голосов
/ 29 августа 2018

В настоящее время IBM не поставляла модуль DBMS_LOCK для Db2-for-LUW, хотя это может измениться в будущем, или вы можете реализовать свой собственный, если у вас есть навыки.

Но если вы используете последние версии Db2 для Linux / Unix / Windows, то вы можете использовать процедуру DBMS_ALERT.WAITONE . Это не точное совпадение, но может быть достаточно хорошим. Идея состоит в том, чтобы подождать указанное время для предупреждения (сигнала), которое никогда не будет запущено (т.е. вы должны убедиться, что код не сигнализирует об указанном предупреждении, если вы не хотите прервать ожидание).

например, блок ниже будет ждать 5 минут:

--#SET TERMINATOR@
 BEGIN
     DECLARE v_outmessage VARCHAR(32672);
     DECLARE v_outstatus integer default 0;
     DECLARE v_seconds INTEGER default 300;
     CALL dbms_alert.waitone('whatever',v_outmessage ,v_outstatus,v_seconds);
 END@

Существует также опция для реализации функции ожидания (в виде внешнего UDF или внешней хранимой процедуры), которая описана здесь (требуется компилятор C и т. Д.).

...