首页 > 解决方案 > plsql sleep 不使用 dbms_lock.sleep/DBMS_SESSION.sleep

问题描述

有没有人有任何 oracle sql 可以让程序等待 10 秒而不使用 dbms_lock.sleep/DBMS_SESSION.sleep 函数。

在 UAT 实例中,我想每 10 秒运行一次更新语句,并且我当前的数据库角色没有使用 dbms_lock.sleep/DBMS_SESSION.sleep 的特权

标签: oracleplsql

解决方案


我能想到的替代方法之一是使用类中的方法sleep,您可以通过提供一个简单的包装程序轻松使用该方法,如下所示:JavaThreadPL/SQL

程序:

CREATE OR REPLACE PROCEDURE sleep (
  p_milli_seconds IN NUMBER
) AS LANGUAGE JAVA NAME 'java.lang.Thread.sleep(long)';

执行

BEGIN
    DBMS_OUTPUT.PUT_LINE('Start ' || to_char(SYSDATE, 'YYYY-MM-DD HH24:MI:SS'));
    SLEEP(5 * 1000); -- Resting for 5 sec
    DBMS_OUTPUT.PUT_LINE('End   ' || to_char(SYSDATE, 'YYYY-MM-DD HH24:MI:SS'));
END;
/

输出:

Start 2020-03-25 12:57:24
End   2020-03-25 12:57:36

推荐阅读