Oracle의 Sleep 함수: DBMS_LOCK.sleep의 대안
Oracle에서 DBMS_LOCK.sleep 함수는 일반적으로 특정 작업에 대한 실행을 일시 중지하는 데 사용됩니다. 지정된 기간. 하지만 이 기능은 특정 권한이 필요하므로 모든 사용자에게 부여되지 않을 수도 있습니다.
문제
제시된 코드 조각은 DBMS_LOCK을 활용하는 기능(TEST_SLEEP)을 보여줍니다. 지정된 시간(초) 동안 실행을 일시 중지하려면 sleep을 사용하세요. 그러나 이 함수를 사용하려면 프로시저 소유자에게 DBMS_LOCK에 대한 액세스 권한이 필요합니다.
해결책
DBMS_LOCK.sleep을 사용하지 않고 유사한 결과를 얻을 수 있는 대체 방법이 있습니다. 효과:
1. 현재 타임스탬프를 사용한 루프
이 접근 방식은 루프를 사용하여 원하는 시간이 경과할 때까지 현재 타임스탬프를 반복적으로 확인합니다.
CREATE OR REPLACE FUNCTION MYSCHEMA.MY_SLEEP ( IN_TIME IN NUMBER ) RETURN INTEGER IS BEGIN v_now DATE; -- Current timestamp IN_TIME := IN_TIME * (1/86400); -- Convert to fractional day SELECT SYSDATE INTO v_now FROM DUAL; LOOP EXIT WHEN v_now + IN_TIME <= SYSDATE; -- Check again after 1 millisecond DBMS_LOCK.SLEEP(1000000 / 86400000); END LOOP; RETURN 1; END MY_SLEEP;
이 함수는 현재 타임스탬프와 초기 타임스탬프(지정된 절전 시간 포함)는 0보다 작거나 같습니다. 시간 지연은 DBMS_LOCK.SLEEP을 사용하여 도입됩니다. 시스템에 부담을 주지 않도록 작은 증분(1마이크로초)입니다.
참고:
이 방법에는 DBMS_LOCK.sleep 권한이 필요하지 않지만 정확하지 않을 수 있습니다. 또는 특정 시나리오에서는 DBMS_LOCK.sleep만큼 효율적입니다.
위 내용은 DBMS_LOCK.sleep 권한 없이 Oracle에서 절전 기능을 어떻게 달성할 수 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!