[sql-server] 2 초 동안 기다리는 방법?
지정된 시간 (초) 동안 어떻게 실행 지연이 발생합니까?
이것은하지 않습니다 :
WAITFOR DELAY '00:02';
올바른 형식은 무엇입니까?
답변
설명서에WAITFOR()
필요한 문자열 형식이 명시 적으로 나와 있지 않습니다.
2 초 동안 기다립니다.
WAITFOR DELAY '00:00:02';
형식은 hh:mi:ss.mmm
입니다.
답변
다른 답변에서 언급했듯이 다음은 모두 표준 문자열 기반 구문에서 작동합니다.
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
명령문 에 도달하는 데 시간이 오래 걸립니다 .
답변
이건 어때요?
WAITFOR DELAY '00:00:02';
“00:02″가있는 경우이를시 : 분으로 해석합니다.
답변
이 예를보십시오 :
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;