Maison >base de données >tutoriel mysql >Comment implémenter une fonction de veille de base de données dans Oracle sans utiliser DBMS_LOCK ?
Fonction de veille de base de données dans Oracle sans DBMS_LOCK
Dans Oracle, la fonction DBMS_LOCK.sleep permet aux utilisateurs de suspendre l'exécution pendant une durée spécifiée. Cependant, l'utilisation de cette fonction nécessite généralement l'octroi d'autorisations spécifiques au propriétaire de la procédure.
Considérez la fonction suivante qui exploite la fonction 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;
Bien que cette fonction suspende effectivement l'exécution, son l'utilisation nécessite d'accorder l'accès à DBMS_LOCK. Pour contourner cette exigence, une solution alternative existe :
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;
Cette méthode alternative utilise une BOUCLE pour suspendre l'exécution. Il récupère à plusieurs reprises la date et l'heure actuelles et les compare au délai cible. Une fois que l'heure actuelle dépasse la période de retard, la boucle se termine, simulant efficacement l'effet d'une fonction de veille sans nécessiter d'autorisations spéciales.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!