2 초 동안 기다리는 방법?


187

지정된 시간 (초) 동안 어떻게 실행 지연이 발생합니까?

이것은하지 않습니다 :

WAITFOR DELAY '00:02';

올바른 형식은 무엇입니까?


스레드가 2 초 이상 기다리는 것 같습니다. 스레드가 계속되는 데 2 ​​초 이상 걸릴 수 있다는 것을 알고 있지만 로컬 데이터베이스에서 실행할 때 1 분 정도 걸리며 다른 활동이 없습니다.
Chad

1
실제로 2 분 정도 기다립니다.
Nick Chammas

답변:


365

설명서에WAITFOR() 필요한 문자열 형식이 명시 적으로 나와 있지 않습니다.

2 초 동안 기다립니다.

WAITFOR DELAY '00:00:02';

형식은 hh:mi:ss.mmm입니다.


99

다른 답변에서 언급했듯이 다음은 모두 표준 문자열 기반 구문에서 작동합니다.

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

DATETIME값 을 전달하는 다른 방법도 있습니다 . 당신은 내가 이것을 혼동한다고 생각할 수도 WAITFOR TIME있지만, 또한 작동합니다 WAITFOR DELAY.

합격시 고려 사항 DATETIME:

  • 변수로 전달되어야하므로 더 이상 좋은 라이너가 아닙니다.
  • 지연은 에포크 ( '1900-01-01') 이후 시간으로 측정됩니다 .
  • 다양한 지연 시간이 필요한 상황 DATETIME에서는을 올바르게 형식화하는 것 보다을 조작하는 것이 훨씬 쉽습니다 VARCHAR.

2 초 동안 기다리는 방법 :

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

TIME대 대기에 대한 참고 사항 DELAY:

실수로 WAITFOR TIME이미 지나간 날짜를 1 초만 지나도 다시는 반환되지 않는다는 것을 알고 계셨습니까? 확인 해봐:

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

불행히도, WAITFOR DELAY당신이 그것을 음수 DATETIME값으로 전달하면 같은 일을 할 것입니다 (예, 그 일입니다).

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

그러나 WAITFOR DELAY지연 시간이 항상 긍정적인지 확인할 수 있기 때문에 정적 시간 이상을 사용 하는 것이 좋습니다. 그러나 코드가 WAITFOR명령문 에 도달하는 데 시간이 오래 걸립니다 .


25

이건 어때요?

WAITFOR DELAY '00:00:02';

"00:02"가있는 경우이를시 : 분으로 해석합니다.


2

이 예를보십시오 :

exec DBMS_LOCK.sleep(5);

이것은 전체 스크립트입니다.

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;
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.