Datenbank-Ruhezustandsfunktion in Oracle ohne DBMS_LOCK
In Oracle ermöglicht die DBMS_LOCK.sleep-Funktion Benutzern, die Ausführung für eine bestimmte Dauer anzuhalten. Die Verwendung dieser Funktion erfordert jedoch in der Regel die Erteilung spezifischer Berechtigungen an den Prozedurbesitzer.
Betrachten Sie die folgende Funktion, die die DBMS_LOCK.sleep-Funktion nutzt:
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;
Obwohl diese Funktion die Ausführung effektiv anhält, ist sie Für die Nutzung muss der Zugriff auf DBMS_LOCK gewährt werden. Um diese Anforderung zu umgehen, gibt es eine alternative Lösung:
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;
Diese alternative Methode verwendet einen LOOP, um die Ausführung anzuhalten. Es ruft wiederholt das aktuelle Datum und die aktuelle Uhrzeit ab und vergleicht sie mit der Zielverzögerung. Sobald die aktuelle Zeit den Verzögerungszeitraum überschreitet, wird die Schleife beendet und simuliert so effektiv den Effekt einer Schlaffunktion, ohne dass besondere Berechtigungen erforderlich sind.
Das obige ist der detaillierte Inhalt vonWie implementiert man eine Datenbank-Ruhefunktion in Oracle, ohne DBMS_LOCK zu verwenden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!