>데이터 베이스 >MySQL 튜토리얼 >DBMS_LOCK을 사용하지 않고 Oracle에서 데이터베이스 절전 기능을 구현하는 방법은 무엇입니까?

DBMS_LOCK을 사용하지 않고 Oracle에서 데이터베이스 절전 기능을 구현하는 방법은 무엇입니까?

Susan Sarandon
Susan Sarandon원래의
2025-01-03 16:17:38928검색

How to Implement a Database Sleep Function in Oracle Without Using DBMS_LOCK?

DBMS_LOCK이 없는 Oracle의 데이터베이스 절전 기능

Oracle에서는 DBMS_LOCK.sleep 함수를 사용하여 사용자가 지정된 기간 동안 실행을 일시 중지할 수 있습니다. 그러나 이 함수를 사용하려면 일반적으로 프로시저 소유자에게 특정 권한을 부여해야 합니다.

DBMS_LOCK.sleep 함수를 활용하는 다음 함수를 고려하십시오.

CREATE OR REPLACE FUNCTION MYSCHEMA.TEST_SLEEP
(
TIME_  IN  NUMBER
)
RETURN INTEGER IS
 BEGIN
   DBMS_LOCK.sleep(seconds => TIME_);
RETURN 1;
 EXCEPTION
   WHEN OTHERS THEN
   RAISE;
   RETURN 1;
END TEST_SLEEP;

이 함수는 실행을 효과적으로 일시 중지하지만 사용하려면 DBMS_LOCK에 대한 액세스 권한을 부여해야 합니다. 이 요구 사항을 우회하기 위한 대체 솔루션이 있습니다.

IN_TIME INT; --num seconds
v_now DATE;

-- 1) Get the date & time
SELECT SYSDATE
  INTO v_now
  FROM DUAL;

-- 2) Loop until the original timestamp plus the amount of seconds <= current date
LOOP
  EXIT WHEN v_now + (IN_TIME * (1/86400)) <= SYSDATE;
END LOOP;

이 대체 방법은 LOOP를 활용하여 실행을 일시 중지합니다. 현재 날짜와 시간을 반복적으로 검색하고 이를 목표 지연과 비교합니다. 현재 시간이 지연 기간을 초과하면 루프가 종료되어 특별한 권한 없이도 수면 기능의 효과를 효과적으로 시뮬레이션합니다.

위 내용은 DBMS_LOCK을 사용하지 않고 Oracle에서 데이터베이스 절전 기능을 구현하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.