2 सेकंड के लिए कैसे प्रतीक्षा करें?


186

निर्दिष्ट सेकंड के लिए निष्पादन में देरी का कारण कैसे बनता है?

यह ऐसा नहीं करता है:

WAITFOR DELAY '00:02';

सही प्रारूप क्या है?


ऐसा लगता है कि थ्रेड 2 सेकंड से अधिक समय तक प्रतीक्षा करता है। मुझे पता है कि धागे को जारी रखने में 2 सेकंड से अधिक समय लग सकता है, लेकिन स्थानीय डीबी पर चलने पर लगभग 1 मिनट लग रहा है जो कि मैं उपयोग कर रहा हूं और कोई अन्य गतिविधि नहीं चल रही है।
चाड

1
यह वास्तव में ठीक 2 मिनट प्रतीक्षा करेगा।
निक चम्मास

जवाबों:



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एक ऐसी तारीख गुजार देते हैं जो पहले से ही गुजर जाती है, यहां तक ​​कि सिर्फ एक सेकंड के बाद भी वह कभी नहीं लौटेगी? इसकी जांच - पड़ताल करें:

--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;
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.