db2存储过程的休眠时间语法

问题描述 投票:0回答:2

对于oracle,我们可以使用以下语法进行睡眠

DBMS_LOCK.SLEEP(sleepTime);

对于mysql,我们可以使用以下语法进行睡眠

DO SLEEP(sleepTime);

对于db2我怎么能实现这个?以下是我的脚本的一部分。

REPEAT
IF rowCount > 0
THEN

请睡觉(睡眠时间);

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睡觉?。对此有任何帮助将不胜感激

syntax db2 sleep stored-functions
2个回答
2
投票

目前,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编译器等)。


1
投票

尝试无证的call DBMS_ALERT.SLEEP(60)

© www.soinside.com 2019 - 2024. All rights reserved.