एक इनफॉर्मिक्स एसपीएल प्रक्रिया के भीतर से सो जाओ

एक इन्फॉर्मिक्स एसपीएल दिनचर्या के भीतर से पारंपरिक नींद() सिस्टम कॉल के अर्थात् समकक्ष करने का सबसे अच्छा तरीका क्या है? दूसरे शब्दों में, एन सेकंड के लिए बस "रोकें" (या मिलीसेकंड या जो भी हो, लेकिन सेकंड ठीक हैं)। मैं ऐसे समाधान की तलाश में हूं जो नहीं कुछ नए (शायद मेरे द्वारा लिखित) सी कोड या अन्य लाइब्रेरी को इनफॉर्मिक्स सर्वर में जोड़ने में शामिल है। यह कुछ ऐसा होना है जो मैं पूरी तरह से एसपीएल से कर सकता हूं। आईडीएस 10 या 11 के लिए एक समाधान ठीक होगा।

@RET - "स्पष्ट" उत्तर मेरे लिए स्पष्ट नहीं था! मुझे सिस्टम कमांड के बारे में पता नहीं था। धन्यवाद! (और हाँ, मैं वह लड़का हूं जो आपको लगता है कि मैं हूं।)


हां, यह केवल डीबगिंग उद्देश्यों के लिए है। दुर्भाग्यवश, एक एसपीएल के भीतर वर्तमान हमेशा एक ही मूल्य वापस कर देगा, कॉल में प्रवेश पर सेट:

"any call to CURRENT from inside the SPL function that an EXECUTE FUNCTION (or EXECUTE PROCEDURE) statement invokes returns the value of the system clock when the SPL function starts."

IBM Informix Guide to SQL

अपने स्वयं के subroutine में वर्तमान लपेटने में मदद नहीं करता है। आपको अपने रैपर के पहले कॉल पर एक अलग उत्तर मिलता है (बशर्ते आप अंतर दिखाने के लिए वर्ष का उपयोग कर रहे हैं (5) या अंतर को दिखाने के लिए पर्याप्त पर्याप्त रिज़ॉल्यूशन वाले कुछ अन्य प्रकार) लेकिन फिर आपको वही मान वापस मिल जाता है बाद की कॉल, जो सुनिश्चित करता है कि किसी भी प्रकार का लूप कभी समाप्त नहीं होगा।

0
ro fr bn

3 उत्तर

कुछ अच्छा कारण होना चाहिए कि आप स्पष्ट उत्तर नहीं चाहते हैं: <�कोड> सिस्टम "नींद 5" । यदि आप चाहते हैं कि एसपीएल के लिए विभिन्न मूल्यों की जांच करते समय रोकें, तो यहां कुछ विचार हैं (जिनमें से सभी बिल्कुल हैक हैं):

  1. ट्रैस फ़ाइल को एक नामित पाइप बनाएं (यूनिक्स बैक-एंड मानते हुए), इसलिए जब तक आप इसे पढ़ना नहीं चुनते तब तक यह अवरुद्ध हो जाता है, या
  2. एक और तालिका बनाएं जो आपके एसपीएल चुनावों को WHILE लूप से किसी विशेष प्रविष्टि के लिए, और कहीं और कहा गया पंक्ति (बहुत अक्षम)
  3. सेट लॉक मोड को अपने दोस्त बनाएं: "सेट लॉक मोड को प्रतीक्षा करें" निष्पादित करें और जानबूझकर उस तालिका की आवश्यकता है जिसे आप पहले से ही कर्सर खोल रहे हैं। आपको इसे एक एक्सेप्शन हैंडलर में निश्चित रूप से लपेटने की आवश्यकता होगी।

उम्मीद है कि कुछ मदद है (और यदि आप एआरएस और रोज़ :: डीबी प्रसिद्धि के समान जेएस हैं, तो कम से कम मैं कर सकता हूं ;-)

0
जोड़ा

मुझे लगता है कि आप डिबगिंग उद्देश्यों के लिए यह "रोकें" चाहते हैं, अन्यथा इसके बारे में सोचें, आपके पास हमेशा सोने के मुकाबले आपके सर्वर के लिए कुछ बेहतर कार्य होंगे ...

A suggestion: Maybe you could get CURRENT, add it a few seconds ( let mytimestamp ) then in a while loop select CURRENT while CURRENT <= mytimestamp . I've no informix setup around my desk to try it, so you'll have to figure the correct syntax. Again, do not put such a hack on a production server. You've been warned :D

0
जोड़ा
शीर्ष-स्तरीय SQL कथन चलाते समय वर्तमान में परिवर्तन नहीं होता है। एक डीबीआईएनएफओ() है जो करता है - और sysmaster में जानकारी है जो करता है।
जोड़ा लेखक Jonathan Leffler, स्रोत

फिर आपको किसी अन्य फ़ंक्शन में वर्तमान में कॉल करना होगा जिसे आप पहले से कॉल करेंगे (लेकिन यह पिछले हैक पर एक हैक है ...)।

0
जोड़ा