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 중국어 웹사이트의 기타 관련 기사를 참조하세요!