web-dev-qa-db-ja.com

2秒待つには?

指定された秒数の間、どのように実行が遅れるのでしょうか。

これはしません:

WAITFOR DELAY '00:02';

正しい形式は何ですか?

156
ChadD

WAITFOR()のドキュメント は、必要な文字列フォーマットを明示的にレイアウトしていません。

これは2秒間待ちます。

WAITFOR DELAY '00:00:02';

フォーマットはhh:mi:ss.mmmです。

305
Nick Chammas

他の回答で述べたように、以下はすべて標準の文字列ベースの構文で機能します。

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

DATETIMEname__値を渡す代替方法もあります。私はこれをWAITFOR TIMEと混同していると思うかもしれませんが、WAITFOR DELAYでも機能します。

DATETIMEname __:を渡すための考慮事項

  • それは変数として渡されなければなりません、それでもうNice one-linerではありません。
  • 遅延は、エポックからの経過時間('1900-01-01')として測定されます。
  • 可変量の遅延が必要な状況では、DATETIMEname__を適切にフォーマットするよりもVARCHARname__を操作する方がはるかに簡単です。

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

TIMEname__とDELAYname __:を待つことに関するメモ

あなたが誤ってWAITFOR TIMEにすでに過ぎた日付を、たとえ一秒でも過ぎて渡したとしても、それは決して戻ってこないことに気づいたことがありますか?見てみな:

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

残念ながら、負のDATETIMEname__値を渡すとWAITFOR DELAYは同じことをします(はい、それは問題です)。

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

ただし、遅延が正であることをいつでも確認でき、コードがWAITFORname__ステートメントに到達するまでに長い時間がかかるため、WAITFOR DELAYを静的時間にわたって使用することをお勧めします。

78

これはどう?

WAITFOR DELAY '00:00:02';

あなたが "00:02"を持っているなら、それは時間:分としてそれを解釈しています。

22
JohnD

この例を試してください:

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