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

时间:2018-08-29 07:03:31

标签: syntax db2 sleep stored-functions

对于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进行睡眠?对此有任何帮助

2 个答案:

答案 0 :(得分: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编译器等)。

答案 1 :(得分:1)

尝试使用未公开的call DBMS_ALERT.SLEEP(60)