Oracle のノースリーブ スリープ
DBMS_LOCK.sleep 関数は、指定した期間、Oracle データベースの実行を一時停止する便利な方法を提供します。ただし、この機能へのアクセスを許可すると、セキュリティ上のリスクが生じる可能性があります。 DBMS_LOCK.sleep に頼らずに実行を一時停止する別の方法はありますか?
解決策
残念ながら、DBMS_LOCK.sleep にアクセスしないと、直接置き換えることは容易ではない可能性があります。利用可能。ただし、睡眠のような動作をシミュレートできる回避策があります。
CREATE OR REPLACE FUNCTION MYSCHEMA.NO_SLEEP ( IN_TIME INT -- Number of seconds ) RETURN INTEGER AS BEGIN DECLARE v_now DATE; -- Current date and time BEGIN -- 1) Get the current date and time SELECT SYSDATE INTO v_now FROM DUAL; -- 2) Loop until the current date is greater than or equal to the timestamp plus the delay LOOP EXIT WHEN v_now + (IN_TIME * (1/86400)) >= SYSDATE; -- Convert seconds to fractional days END LOOP; RETURN 0; -- Return 0 upon successful sleep EXCEPTION WHEN OTHERS THEN RETURN -1; -- Return -1 in case of any other error END; END NO_SLEEP;
使用法
この関数は次と同様に使用できます。 DBMS_LOCK.sleep:
SELECT NO_SLEEP(10.5) FROM DUAL; -- Sleep for 10.5 seconds
注:
この回避策はスリープ関数をシミュレートしますが、これは単なるハックであり、効率的ではないことに注意することが重要です。 DBMS_LOCK.sleep として。アプリケーションが実際に実行の一時停止を必要とする場合は、DBMS_LOCK.sleep へのアクセスを許可することをお勧めします。
以上がセキュリティリスクなしでOracleでDBMS_LOCK.sleepをシミュレートする方法?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。