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 存储过程的休眠时间语法的主要内容,如果未能解决你的问题,请参考以下文章