यह निर्माण संभव नहीं है:
IF EXECUTE 'EXISTS (SELECT 1 FROM mytable)' THEN ...
आप को आसान बनाने में कर सकते हैं:
IF EXISTS (SELECT 1 FROM mytable) THEN ...
लेकिन अपने उदाहरण शायद सिर्फ सरल है। गतिशील एसक्यूएलEXECUTE
, read the manual here के साथ निष्पादित। आप FOUND
के लिए जाँच कर सकते हैं RETURN QUERY EXECUTE
के बाद:
IF FOUND THEN ...
हालांकि
: विशेष रूप से
ध्यान दें कि EXECUTE
GET DIAGNOSTICS
के उत्पादन में बदलता है, लेकिन FOUND
नहीं बदलता है।
बोल्ड जोर मेरा है। एक सादे EXECUTE
के लिए यह बजाय कार्य करें:
...
DECLARE
i int;
BEGIN
EXECUTE 'SELECT 1 FROM mytable';
GET DIAGNOSTICS i = ROW_COUNT;
IF i > 0 THEN ...
या अगर अवसर - केवल एकल पंक्ति परिणामों के साथ विशेष रूप से - INTO
clauseEXECUTE
के साथ उपयोग सीधे गतिशील क्वेरी से एक परिणाम प्राप्त करने के लिए। मैं मैनुअल here बोली:
एक पंक्ति या चर सूची प्रदान की जाती है, तो यह वास्तव में क्वेरी के परिणामों के संरचना (जब एक रिकार्ड चर प्रयोग किया जाता है, यह ही कॉन्फ़िगर परिणाम संरचना मैच के लिए मेल खाना चाहिए, खुद ब खुद)। यदि एकाधिक पंक्तियां लौटा दी जाती हैं, तो केवल पहले को INTO
चर के लिए असाइन किया जाएगा। यदि कोई पंक्तियां वापस नहीं आती हैं, तो NULL को INTO
चर (ओं) को असाइन किया गया है।
...
DECLARE
_var1 int; -- init value is NULL unless instructed otherwise
BEGIN
EXECUTE format('SELECT var1 FROM %I WHERE x=y LIMIT 1', 'my_Table')
INTO _var1;
IF _var1 IS NOT NULL THEN ...
स्रोत
2011-12-09 17:26:13
आप 'फाउंड' से संबंधित हैं। यह एक सादे निष्पादन द्वारा निर्धारित नहीं है। विवरण के लिए मेरा जवाब देखें। –
हां, मुझे यही जवाब देने के लिए मिलता है। –