DBMS_LOCK を使用しない ORACLE でのスリープ機能の実装
特定のシナリオでは、ORACLE での SQL クエリの実行を手動で遅延することが要件として発生する場合があります。ただし、 DBMS_LOCK.sleep 関数に依存すると、多くの場合、プロシージャを実行するユーザーに権限を付与する必要があります。これを回避するには、別のアプローチを使用できます。
提供された関数 MYSCHEMA.TEST_SLEEP は、DBMS_LOCK.sleep を使用して、指定された秒数の間実行を一時停止します。ただし、プロシージャ所有者に DBMS_LOCK 権限を付与する必要があります。これを回避するために、次のコード スニペットは代替メソッドを提供します。
CREATE OR REPLACE FUNCTION MYSCHEMA.ALTERNATIVE_SLEEP ( TIME_ IN NUMBER ) RETURN INTEGER IS IN_TIME INT; -- seconds to sleep v_now DATE; -- current date and time BEGIN SELECT SYSDATE -- Get the current date and time INTO v_now FROM DUAL; LOOP -- Sleep until the specified time has elapsed EXIT WHEN v_now + (IN_TIME * (1/86400)) <= SYSDATE; -- Break from the loop when the target time is reached END LOOP; RETURN 1; -- Dummy return value to avoid syntax errors EXCEPTION WHEN OTHERS THEN RAISE; RETURN 1; -- Dummy return value to avoid syntax errors END ALTERNATIVE_SLEEP;
この関数はループを利用して、DBMS_LOCK パッケージを利用せずにスリープ機能をシミュレートします。現在の日付と時刻を定期的にチェックして、指定されたスリープ時間が経過したかどうかを判断します。目標時間に達すると、ループは終了します。このアプローチでは、プロシージャの実行を必要な時間だけ効果的に一時停止します。
以上がDBMS_LOCK 権限なしで Oracle にスリープ機能を実装するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。