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

Posted

技术标签:

【中文标题】db2 存储过程的休眠时间语法【英文标题】:Sleep time syntax for db2 store procedure 【发布时间】:2018-08-29 07:03:31 【问题描述】:

对于 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 进行睡眠?如果有任何帮助,我们将不胜感激

【问题讨论】:

【参考方案1】:

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

【讨论】:

感谢您的快速回复。 dbms_alert.waitone 为我工作。【参考方案2】:

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

【讨论】:

什么版本的 Db2? ibm2 是什么? 抱歉,打错了。 IBM DB2。我得搜索一下版本。

以上是关于db2 存储过程的休眠时间语法的主要内容,如果未能解决你的问题,请参考以下文章

如何在 DB2 LUW 中的存储过程或 UDF 中“选择”?

存储过程语法

db2存储过程

db2如何创建存储过程

本机存储过程与休眠

db2 存储过程 异常处理