工作中遇到一个这样的需求:对同样的信息需要发送给两个人,但是有一个人必须提前一小时收到。刚开始是想到用两个过程,设定定时任务相隔一个小时即可。但是总感觉这样不好,想在一个过程里就完成这个事情。最后写了一个延迟的过程,称为睡眠过程sleep。在某个过程中需要延迟一个小时,sleep(3600)这样调用即可。
CREATE OR REPLACE PROCEDURE SLEEP(TM IN INTEGER) IS
/*实现延迟功能,传入参数为延迟的秒数*/
END_DT DATE;
V_RESULT VARCHAR2(5);
BEGIN
END_DT := SYSDATE + TM / (24 * 60 * 60);
WHILE SYSDATE < END_DT LOOP
NULL;
END LOOP;
RETURN;
EXCEPTION
WHEN OTHERS THEN
BEGIN
P_PUB_ERROR_LOG(V_RESULT,
SQLCODE,
SQLERRM,
'SLEEP');
ROLLBACK;
END;
END;