Pour réduire le besoin d'autorisations explicites au package DBMS_LOCK, une approche alternative peut être utilisée pour simuler la fonctionnalité de DBMS_LOCK.sleep procédure. Bien que cette méthode soit reconnue comme un « horrible hack », elle fournit une solution de contournement sans recourir à des modifications d'autorisation.
La fonction personnalisée ci-dessous repose sur une approche basée sur l'horodatage :
-- Custom sleep function without DBMS_LOCK CREATE OR REPLACE FUNCTION MYSCHEMA.ALTERNATIVE_SLEEP ( IN_TIME NUMBER ) RETURN INTEGER IS v_now DATE; BEGIN -- Capture the current time SELECT SYSDATE INTO v_now FROM DUAL; -- Loop until the current time exceeds the initial time + input seconds LOOP EXIT WHEN v_now + (IN_TIME * (1/86400)) <= SYSDATE; END LOOP; RETURN 1; EXCEPTION WHEN OTHERS THEN RAISE; RETURN 1; END ALTERNATIVE_SLEEP;
Cette La fonction utilise une série de manipulations de date et d'heure pour obtenir un comportement semblable à celui du sommeil. Il vérifie de manière itérative si l'heure actuelle a dépassé le temps de sommeil souhaité en ajoutant les secondes saisies à l'heure initiale. Lorsque cette condition est remplie, la fonction quitte la boucle.
L'utilisation de cette fonction personnalisée est similaire à l'approche originale :
SELECT ALTERNATIVE_SLEEP(10.5) FROM DUAL;
Notez que cette méthode a ses inconvénients et n'est pas recommandée pour une utilisation pratique.
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!