2015-10-14 7 views
6

मेरे पास एक पंक्ति टी है जिसमें कुछ पंक्तियों के साथ टाइप int int है। मैं इसे लूप करना चाहता हूं। बेशक, मैं इसके लिए एक चुनिंदा क्वेरी लिख सकता हूं। लेकिन मैं प्रक्रियाओं सीख रहा हूँ और एक प्रक्रिया लिखा था,फायरबर्ड में काम कैसे निलंबित करता है?

set term ^; 
create procedure qt returns(a int) as 
begin 
    for select i from t into :a do 
     suspend; 
end^ 
set term ;^ 

लेकिन जब मैं इस प्रक्रिया कहते हैं, मैं केवल एक पंक्ति वापस,

execute procedure qt; 

मैं देख रहा हूँ,

  A 
============ 
      1 

मुझे लगता है कि मिल मुझे suspend समझ में नहीं आता है।

उत्तर

8

उनमें SUSPEND के साथ संग्रहीत प्रक्रियाओं को चुनिंदा प्रक्रियाएं कहा जाता है। आप SELECT का उपयोग कर उन्हें निष्पादित करें:

SELECT * FROM qt 

या

SELECT * FROM qt() 

EXECUTE PROCEDURE बयान केवल प्रक्रियाओं है कि एक ही पंक्ति परिणाम उपज के लिए है। यदि आप इसे चुनिंदा संग्रहीत प्रक्रिया के लिए उपयोग करते हैं, तो यह केवल एक पंक्ति उत्पन्न करेगा (और SUSPEND हिट होने पर बाहर निकलें)।

क्या इस बारे में दस्तावेज के बारे में पूछताछ के जवाब में:

  • पेज 177 पर Interbase 6.0 भाषा संदर्भ का कहना है:

    निलंबित एक निष्पादन प्रक्रिया में इस्तेमाल नहीं किया जाना चाहिए।

  • पेज 178 पर यह चयन और निष्पादन योग्य प्रक्रियाओं (थोड़ा फिट करने के लिए संशोधित) में SUSPEND, EXIT और END के व्यवहार की एक तालिका दिखाती है: (
Procedure type SUSPEND    EXIT    END 
Selectable  • Suspends execution Jumps to final END • Returns control 
       of procedure until       to application 
       next FETCH is issued      • Sets SQLCODE to 100 
       • Returns output        (end of record stream) 
       values 

Executable  • Jumps to final END Jumps to final END • Returns values 
       • Not recommended       • Returns control 
                  to application 
  • एक संग्रहीत प्रक्रिया के लिए पृष्ठ 178 पर दिखाया गया है) जो कई पंक्तियों का उत्पादन कर सकता है, पेज 17 9 SELECT के साथ निष्पादित होने पर व्यवहार में अंतर का वर्णन करता है और EXECUTE PROCEDURE के साथ निष्पादित करता है।
+0

आपको बहुत बहुत धन्यवाद। क्या यह कहीं फायरबर्ड दस्तावेज में लिखा गया है? क्योंकि मैंने इसे कभी नहीं पढ़ा है। – ericj

+0

@ericj मुझे इसे देखने की आवश्यकता होगी; मेरे पास अभी ऐसा करने का समय नहीं है। –

+1

@ericj मैंने इंटरबेस 6 भाषा संदर्भ से जानकारी के साथ अपना उत्तर अपडेट किया है। –

संबंधित मुद्दे