> 데이터 베이스 > MySQL 튜토리얼 > DBMS_LOCK.sleep 권한 없이 Oracle에서 절전 기능을 어떻게 달성할 수 있습니까?

DBMS_LOCK.sleep 권한 없이 Oracle에서 절전 기능을 어떻게 달성할 수 있습니까?

Patricia Arquette
풀어 주다: 2024-12-24 20:35:10
원래의
767명이 탐색했습니다.

How Can I Achieve a Sleep Function in Oracle Without DBMS_LOCK.sleep Permissions?

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

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿