关于这个主题有一篇很好的文章:PL/SQL: Sleep without using DBMS_LOCK帮助了我。我使用了包裹在自定义包中的选项 2。建议的解决方案是:
选项 1:APEX_UTIL.sleep
如果安装了 APEX,您可以使用公开可用包 APEX_UTIL 中的过程“PAUSE”。
示例——“等待 5 秒”:
SET SERVEROUTPUT ON ;
BEGIN
DBMS_OUTPUT.PUT_LINE('Start ' || to_char(SYSDATE, 'YYYY-MM-DD HH24:MI:SS'));
APEX_UTIL.PAUSE(5);
DBMS_OUTPUT.PUT_LINE('End ' || to_char(SYSDATE, 'YYYY-MM-DD HH24:MI:SS'));
END;
/
选项 2:java.lang.Thread.sleep
另一种选择是使用 Java 类“Thread”中的“sleep”方法,您可以通过提供一个简单的 PL/SQL 包装过程轻松使用该方法:
注意:请记住,“Thread.sleep”使用毫秒!
--- create ---
CREATE OR REPLACE PROCEDURE SLEEP (P_MILLI_SECONDS IN NUMBER)
AS LANGUAGE JAVA NAME 'java.lang.Thread.sleep(long)';
--- use ---
SET SERVEROUTPUT ON ;
BEGIN
DBMS_OUTPUT.PUT_LINE('Start ' || to_char(SYSDATE, 'YYYY-MM-DD HH24:MI:SS'));
SLEEP(5 * 1000);
DBMS_OUTPUT.PUT_LINE('End ' || to_char(SYSDATE, 'YYYY-MM-DD HH24:MI:SS'));
END;
/