Comment peut-on provoquer un retard d'exécution pour un nombre spécifié de secondes?
Cela ne le fait pas:
WAITFOR DELAY '00:02';
Quel est le bon format?
La documentation de WAITFOR()
ne précise pas explicitement le format de chaîne requis.
Cela attendra 2 secondes:
WAITFOR DELAY '00:00:02';
Le format est hh:mi:ss.mmm
.
Comme indiqué dans d'autres réponses, tout ce qui suit fonctionnera pour la syntaxe standard basée sur des chaînes.
WAITFOR DELAY '02:00' --Two hours
WAITFOR DELAY '00:02' --Two minutes
WAITFOR DELAY '00:00:02' --Two seconds
WAITFOR DELAY '00:00:00.200' --Two tenths of a seconds
Il existe également une autre méthode permettant de lui passer une valeur DATETIME
. Vous pourriez penser que je confonds ceci avec WAITFOR TIME
, mais cela fonctionne également pour WAITFOR DELAY
.
Considérations pour passer DATETIME
:
'1900-01-01'
).DATETIME
que de formater correctement un VARCHAR
.Comment attendre 2 secondes:
--Example 1
DECLARE @Delay1 DATETIME
SELECT @Delay1 = '1900-01-01 00:00:02.000'
WAITFOR DELAY @Delay1
--Example 2
DECLARE @Delay2 DATETIME
SELECT @Delay2 = dateadd(SECOND, 2, convert(DATETIME, 0))
WAITFOR DELAY @Delay2
ne note sur l'attente de TIME
vs DELAY
:
Avez-vous déjà remarqué que si vous passez accidentellement WAITFOR TIME
une date déjà passée, même une seconde à la fois, elle ne reviendra jamais? Vérifiez-le:
--Example 3
DECLARE @Time1 DATETIME
SELECT @Time1 = getdate()
WAITFOR DELAY '00:00:01'
WAITFOR TIME @Time1 --WILL HANG FOREVER
Malheureusement, WAITFOR DELAY
fera la même chose si vous lui transmettez une valeur négative DATETIME
(oui, c'est une chose).
--Example 4
DECLARE @Delay3 DATETIME
SELECT @Delay3 = dateadd(SECOND, -1, convert(DATETIME, 0))
WAITFOR DELAY @Delay3 --WILL HANG FOREVER
Cependant, je recommanderais quand même l’utilisation de WAITFOR DELAY
sur une période statique, car vous pouvez toujours confirmer que votre retard est positif et qu’il restera ainsi pendant le temps nécessaire à votre code pour atteindre l’instruction WAITFOR
.
Que dis-tu de ça?
WAITFOR DELAY '00:00:02';
Si vous avez "00:02", cela est interprété comme Heures: Minutes.
Essayez cet exemple:
exec DBMS_LOCK.sleep(5);
Ceci est le script entier:
SELECT TO_CHAR (SYSDATE, 'MM-DD-YYYY HH24:MI:SS') "Start Date / Time" FROM DUAL;
exec DBMS_LOCK.sleep(5);
SELECT TO_CHAR (SYSDATE, 'MM-DD-YYYY HH24:MI:SS') "End Date / Time" FROM DUAL;