Oracle
 sql >> डेटाबेस >  >> RDS >> Oracle

Oracle क्वेरी संकलित नहीं होगी

मुझे लगता है कि समस्या यह है कि आप अपने 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 . डालकर बाद स्टेटमेंट स्ट्रिंग।




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. पीएल/एसक्यूएल में अल्पविराम सीमित स्ट्रिंग का विश्लेषण कैसे करें?

  2. त्रुटि:ORA-00955:Oracle फ़ंक्शन में मौजूदा ऑब्जेक्ट द्वारा नाम पहले से ही उपयोग किया जाता है

  3. ओरेकल संग्रहीत प्रक्रिया, रेफरी कर्सर बनाम सहयोगी सरणी लौटा रहा है

  4. Oracle में दिनांक अंतर से वर्ष की गणना करें

  5. प्रत्येक विभाग से अधिकतम एसएएल के साथ ईएमपी चुनें