【问题标题】:Sleep time syntax for db2 store proceduredb2 存储过程的休眠时间语法
【发布时间】: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 进行睡眠?如果有任何帮助,我们将不胜感激

【问题讨论】:

    标签: syntax db2 sleep stored-functions


    【解决方案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。我得搜索一下版本。
    猜你喜欢
    • 1970-01-01
    • 2011-01-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多