【DB笔试面试496】如何让程序等待60秒钟后继续运行?

  • 2019 年 10 月 8 日
  • 笔记

题目部分

在Oracle中,如何让程序等待60秒钟后继续运行?

答案部分

可以执行$ORACLE_HOME/rdbms/admin/dbmslock.sql来创建DBMS_LOCK包,该包可以实现让程序暂时等待的功能。若想普通用户使用该包,则需要在SYS用户下执行“GRANT EXECUTE ON DBMS_LOCK TO USER_XXX;”命令,下面给出一个示例:

SYS@lhrdb> SET SERVEROUTPUT ON  SYS@lhrdb> BEGIN    2      DBMS_OUTPUT.PUT_LINE(TO_CHAR(SYSDATE,'YYYYMMDDHH24MISS'));    3      DBMS_LOCK.SLEEP(60);    4      DBMS_OUTPUT.PUT_LINE(TO_CHAR(SYSDATE,'YYYYMMDDHH24MISS'));    5  END;    6  /  20160822154330  20160822154430  PL/SQL procedure successfully completed.  

由结果可以看出,程序刚好等待了1分钟。

需要注意的是,从Oracle 18c(即12.2.0.2)开始,普通用户也可以直接使用DBMS_SESSION.SLEEP来实现让程序暂时等待的功能,而不用再单独给普通用户授予权限了。

以下代码也可以让会话暂时等待1分钟:

SYS@lhrdb> EXEC DBMS_SESSION.SLEEP(60);

本文选自《Oracle程序员面试笔试宝典》,作者:李华荣。