db2 存储过程的休眠时间语法
Sleep time syntax for db2 store procedure
对于 oracle,我们可以使用以下语法进行睡眠
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 休眠?如能提供任何帮助,我们将不胜感激
目前 IBM 没有为 Db2-for-LUW 提供 DBMS_LOCK 模块,尽管将来可能会改变,或者如果您有能力,可以自己实现。
但是如果您正在为 Linux/Unix/Windows 使用最新的 Db2 版本,那么您可能会滥用 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 或外部存储过程),here(需要 C 编译器等)进行了描述。
尝试未记录的 call DBMS_ALERT.SLEEP(60)
对于 oracle,我们可以使用以下语法进行睡眠
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 休眠?如能提供任何帮助,我们将不胜感激
目前 IBM 没有为 Db2-for-LUW 提供 DBMS_LOCK 模块,尽管将来可能会改变,或者如果您有能力,可以自己实现。
但是如果您正在为 Linux/Unix/Windows 使用最新的 Db2 版本,那么您可能会滥用 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 或外部存储过程),here(需要 C 编译器等)进行了描述。
尝试未记录的 call DBMS_ALERT.SLEEP(60)