Maison > base de données > tutoriel mysql > Comment implémenter la fonctionnalité de veille dans Oracle sans les privilèges DBMS_LOCK ?

Comment implémenter la fonctionnalité de veille dans Oracle sans les privilèges DBMS_LOCK ?

Mary-Kate Olsen
Libérer: 2024-12-24 21:46:15
original
162 Les gens l'ont consulté

How to Implement Sleep Functionality in Oracle Without DBMS_LOCK Privileges?

Implémentation de la fonctionnalité de veille dans ORACLE sans DBMS_LOCK

Retarder manuellement l'exécution d'une requête SQL dans ORACLE peut devenir une exigence dans certains scénarios. Cependant, s'appuyer sur la fonction DBMS_LOCK.sleep nécessite souvent d'accorder des privilèges à l'utilisateur exécutant la procédure. Pour contourner cela, une approche alternative peut être utilisée.

La fonction fournie, MYSCHEMA.TEST_SLEEP, utilise DBMS_LOCK.sleep pour suspendre l'exécution pendant un nombre de secondes spécifié. Cependant, cela nécessite d'accorder le privilège DBMS_LOCK au propriétaire de la procédure. Pour éviter cela, l'extrait de code suivant propose une méthode alternative :

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;
Copier après la connexion

Cette fonction exploite une boucle pour simuler la fonctionnalité de veille sans utiliser le package DBMS_LOCK. Il vérifie périodiquement la date et l'heure actuelles pour déterminer si la durée de sommeil spécifiée est écoulée. Lorsque l'heure cible est atteinte, la boucle se termine. Cette approche suspend effectivement l'exécution de la procédure pendant la durée souhaitée.

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!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal