小さい頃はエラ呼吸

いつのまにやら肺で呼吸をしています。


Oracleで一定時間処理をスリープ(Sleep)させる方法

はじめに

Oracleで一定時間処理をsleepさせたいことがあると思います。
PL/SQLのDBMS_LOCK.SLEEPを使うと、指定した時間だけ処理を待機させることができます。

事前準備(DBMS_LOCK権限を付与する)

DBMS_LOCK.SLEEPを使うには、実行ユーザにDBMS_LOCKの権限を付与する必要があります。
以下の例ではhogeユーザに対して、DBMS_LOCKの権限を付与します。

CONN / AS SYSDBA
GRANT EXECUTE ON DBMS_LOCK TO hoge;
DBMS_LOCK.SLEEPでスリープさせる

以下の例ではtable01をselectした後、5秒だけスリープしています。

set timing on
select * from table01 for update;
execute DBMS_LOCK.SLEEP(5);
commit;

複数プロセスでの排他ロックの確認などで使えそうですね。