指定された秒数の間、どのように実行が遅れるのでしょうか。
これはしません:
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
name__値を渡す代替方法もあります。私はこれをWAITFOR TIME
と混同していると思うかもしれませんが、WAITFOR DELAY
でも機能します。
DATETIME
name __:を渡すための考慮事項
'1900-01-01'
)として測定されます。DATETIME
name__を適切にフォーマットするよりもVARCHAR
name__を操作する方がはるかに簡単です。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
name__とDELAY
name __:を待つことに関するメモ
あなたが誤ってWAITFOR TIME
にすでに過ぎた日付を、たとえ一秒でも過ぎて渡したとしても、それは決して戻ってこないことに気づいたことがありますか?見てみな:
--Example 3
DECLARE @Time1 DATETIME
SELECT @Time1 = getdate()
WAITFOR DELAY '00:00:01'
WAITFOR TIME @Time1 --WILL HANG FOREVER
残念ながら、負のDATETIME
name__値を渡すとWAITFOR DELAY
は同じことをします(はい、それは問題です)。
--Example 4
DECLARE @Delay3 DATETIME
SELECT @Delay3 = dateadd(SECOND, -1, convert(DATETIME, 0))
WAITFOR DELAY @Delay3 --WILL HANG FOREVER
ただし、遅延が正であることをいつでも確認でき、コードがWAITFOR
name__ステートメントに到達するまでに長い時間がかかるため、WAITFOR DELAY
を静的時間にわたって使用することをお勧めします。
これはどう?
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;