【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程式設計師面試筆試寶典》,作者:李華榮。