web-dev-qa-db-fra.com

Comment attendre 2 secondes?

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?

165
ChadD

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.

313
Nick Chammas

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:

  • Il doit être passé comme une variable, donc ce n'est plus un one-liner de Nice.
  • Le délai est mesuré comme le temps écoulé depuis l'époque ('1900-01-01').
  • Pour les situations nécessitant un délai variable, il est beaucoup plus facile de manipuler un 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.

84
SurroundedByFish

Que dis-tu de ça?

WAITFOR DELAY '00:00:02';

Si vous avez "00:02", cela est interprété comme Heures: Minutes.

23
JohnD

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;
2
john m