2 saniye nasıl beklenir?


187

Kişi belirli bir saniye boyunca yürütmede gecikmeye nasıl neden olur?

Bunu yapmaz:

WAITFOR DELAY '00:02';

Doğru biçim nedir?


İş parçacığı 2 saniyeden uzun sürüyor gibi görünüyor. İş parçacığının devam etmesi 2 saniyeden uzun sürebileceğini fark ediyorum, ancak opnly kullanıyorum ve başka bir etkinliğe sahip olmayan yerel bir db üzerinde çalışırken yaklaşık 1 dakika sürüyor.
Çad

1
Bu tam olarak 2 dakika bekleyecektir.
Nick Chammas

Yanıtlar:



99

Diğer yanıtlarda belirtildiği gibi, aşağıdakilerin tümü standart dize tabanlı sözdizimi için çalışır.

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

Buna bir DATETIMEdeğer aktarmanın alternatif bir yöntemi de vardır . Bunu karıştırdığımı düşünebilirsiniz WAITFOR TIME, ama aynı zamanda işe yarıyor WAITFOR DELAY.

Geçme hususları DATETIME:

  • Bir değişken olarak geçirilmelidir, bu yüzden artık güzel bir tek astar değildir.
  • Gecikme, Epoch ( '1900-01-01') 'dan bu yana geçen süre olarak ölçülür .
  • Değişken miktarda gecikme gerektiren durumlar için, a'yı DATETIMEdüzgün biçimlendirmekten çok daha kolaydır VARCHAR.

2 saniye nasıl beklenir:

--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

Bekleyen ilgili not TIMEvs DELAY:

Hiç bir an WAITFOR TIMEbile geçmiş bir tarihi geçerseniz , asla geri dönmeyeceğini fark ettiniz mi? Bunu kontrol et:

--Example 3
DECLARE @Time1 DATETIME
SELECT @Time1 = getdate()
WAITFOR DELAY '00:00:01'
WAITFOR TIME @Time1 --WILL HANG FOREVER

Ne yazık ki, WAITFOR DELAYnegatif bir DATETIMEdeğer iletirseniz aynı şeyi yapar (evet, bu bir şey).

--Example 4
DECLARE @Delay3 DATETIME
SELECT @Delay3 = dateadd(SECOND, -1, convert(DATETIME, 0))
WAITFOR DELAY @Delay3 --WILL HANG FOREVER

Ancak, WAITFOR DELAYher zaman gecikmenizin pozitif olduğunu onaylayabileceğiniz ve bu kadar uzun süre kodunuzun WAITFORifadeye ulaşması için bu şekilde kalacağından statik bir süre boyunca kullanmanızı öneririm .


25

Buna ne dersin?

WAITFOR DELAY '00:00:02';

Eğer "00:02" varsa bunu Saat: Dakika olarak yorumlar.


2

Bu örneği deneyin:

exec DBMS_LOCK.sleep(5);

Tüm senaryo bu:

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;
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.