मुझे लगता है कि समस्या यह है कि आप अपने EXECUTE IMMEDIATE
में जिस डायनामिक स्टेटमेंट का प्रयास कर रहे हैं, वह है एक एसक्यूएल स्टेटमेंट है, पीएल/एसक्यूएल स्टेटमेंट नहीं। और INTO
एसक्यूएल नहीं है, यह पीएल/एसक्यूएल है।
आप या तो एक गतिशील SQL कर सकते हैं सिर्फ एक बाइंड वैरिएबल के साथ स्टेटमेंट और फिर अपना INTO
. रखें गतिशील कथन के बाहर। डायनेमिक SQL . करते समय यह समर्थित है कथन:
execute immediate 'select CASE WHEN EXISTS ( SELECT 1 from samples where samplecode = :varSamplecode and auditflag = 0 and ' || varFilterString || ') then 1 else 0 end from DUAL'
into varResult
using IN varSampleCode;
या आप एक गतिशील PL/SQL कर सकते हैं अनाम ब्लॉक:
execute immediate 'begin select CASE WHEN EXISTS ( SELECT 1 from samples where samplecode = :varSamplecode and auditflag = 0 and ' || varFilterString || ') then 1 else 0 end into :varresult from DUAL; end;'
using IN varSampleCode, OUT varResult;
इस बार INTO
डायनामिक स्ट्रिंग के अंदर होना चाहिए और बाइंड वैरिएबल का उपयोग करना चाहिए, क्योंकि BEGIN
. के साथ और END;
अब आप डायनामिक PL/SQL कर रहे हैं ।
आपके उपयोग के मामले के लिए मैं पहले विकल्प की अनुशंसा करता हूं, गतिशील SQL और INTO
. डालकर बाद स्टेटमेंट स्ट्रिंग।