Veille sans manches dans Oracle
La fonction DBMS_LOCK.sleep fournit un moyen pratique de suspendre l'exécution dans une base de données Oracle pendant une durée spécifiée. Cependant, accorder l’accès à cette fonction peut constituer un risque pour la sécurité. Existe-t-il une approche alternative pour suspendre l'exécution sans recourir à DBMS_LOCK.sleep ?
Solutions
Malheureusement, sans accès à DBMS_LOCK.sleep, un remplacement direct peut ne pas être facile disponible. Cependant, il existe une solution de contournement qui peut simuler un comportement semblable à celui du sommeil :
CREATE OR REPLACE FUNCTION MYSCHEMA.NO_SLEEP ( IN_TIME INT -- Number of seconds ) RETURN INTEGER AS BEGIN DECLARE v_now DATE; -- Current date and time BEGIN -- 1) Get the current date and time SELECT SYSDATE INTO v_now FROM DUAL; -- 2) Loop until the current date is greater than or equal to the timestamp plus the delay LOOP EXIT WHEN v_now + (IN_TIME * (1/86400)) >= SYSDATE; -- Convert seconds to fractional days END LOOP; RETURN 0; -- Return 0 upon successful sleep EXCEPTION WHEN OTHERS THEN RETURN -1; -- Return -1 in case of any other error END; END NO_SLEEP;
Utilisation
Cette fonction peut être utilisée de la même manière que DBMS_LOCK.sleep :
SELECT NO_SLEEP(10.5) FROM DUAL; -- Sleep for 10.5 seconds
Remarque :
Bien que cette solution de contournement simule une fonction sleep, il est important de noter qu'il ne s'agit que d'un hack et qu'il n'est pas aussi efficace que DBMS_LOCK.sleep. Il est recommandé d'accorder l'accès à DBMS_LOCK.sleep si l'application nécessite réellement une suspension de l'exécution.
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!