DBMS_LOCK パッケージへの明示的な許可の必要性を軽減するために、代替アプローチを使用して DBMS_LOCK.sleep の機能をシミュレートできます。手順。この方法は「ひどいハッキング」として認識されていますが、アクセス許可の変更に頼らずに回避策を提供します。
以下のカスタム関数はタイムスタンプ ベースのアプローチに依存しています。
-- Custom sleep function without DBMS_LOCK CREATE OR REPLACE FUNCTION MYSCHEMA.ALTERNATIVE_SLEEP ( IN_TIME NUMBER ) RETURN INTEGER IS v_now DATE; BEGIN -- Capture the current time SELECT SYSDATE INTO v_now FROM DUAL; -- Loop until the current time exceeds the initial time + input seconds LOOP EXIT WHEN v_now + (IN_TIME * (1/86400)) <= SYSDATE; END LOOP; RETURN 1; EXCEPTION WHEN OTHERS THEN RAISE; RETURN 1; END ALTERNATIVE_SLEEP;
これ関数は、一連の日付と時刻の操作を使用して、睡眠のような動作を実現します。入力された秒数を初期時間に加算することで、現在の時間が希望のスリープ時間を超えているかどうかを繰り返しチェックします。この条件が満たされると、関数はループを終了します。
このカスタム関数の使用法は元のアプローチと似ています。
SELECT ALTERNATIVE_SLEEP(10.5) FROM DUAL;
この方法には欠点があるため、推奨されないことに注意してください。実用化に向けて。
以上が権限を付与せずに DBMS_LOCK.sleep をシミュレートするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。