EXECUTE ... USING
केवल PL/PgSQL में काम करता है - कार्य या DO
blocks PL/pgSQL भाषा में लिखा भीतर यानी। यह सादे एसक्यूएल में काम नहीं करता है; तैयार कथन निष्पादित करने के लिए सादे एसक्यूएल में EXECUTE
पूरी तरह से अलग है। आप PostgreSQL की SQL बोली में सीधे डायनामिक एसक्यूएल का उपयोग नहीं कर सकते हैं।
की तुलना करें:
करने के लिए my prior answer में 2 पिछले सममूल्य देखें।
पीएल/पीजीएसक्यूएल को छोड़कर नहीं चलने के अलावा आपका एसक्यूएल स्टेटमेंट गलत है, यह आपकी अपेक्षा की अपेक्षा नहीं करेगा। यदि (select id from ids where condition = some_condition)
रिटर्न 42
कहता है, तो id
एक पूर्णांक है तो कथन विफल हो जाएगा। यदि यह टेक्स्ट पर डाला गया है तो आपको मिलेगा:
EXECUTE format('SELECT * from result_%s_table', quote_ident('42'));
EXECUTE format('SELECT * from result_%s_table', '"42"');
EXECUTE 'SELECT * from result_"42"_table';
यह अमान्य है। आप वास्तव में result_42_table
या "result_42_table"
चाहते हैं। आप की तरह अधिक कुछ लिखने के लिए होगा:
EXECUTE format('SELECT * from %s', quote_ident('result_'||(select id from ids where condition = some_condition)||'_table'))
... यदि आप quote_ident
उपयोग करना चाहिए।
स्रोत
2012-10-08 10:59:01
बस पूरक, एक 'DO' ब्लॉक हमेशा शून्य देता है और स्वीकार करता है कोई पैरामीटर तो मुझे लगता है ओ पी एक समारोह के लिए प्रतिबंधित है। –
@Clodoaldo अच्छा बिंदु - वे 'SELECT' निष्पादित कर सकते हैं लेकिन यह तब तक उन्हें तब तक अच्छा नहीं करेगा जब तक वे वास्तव में कुछ चुनना नहीं चाहते थे जैसे' चयन करें ... एक temp तालिका में। –
@ क्रेग्रिंजर हाय वहाँ, मुझे पता है कि मैं पार्टी के लिए थोड़ा देर हो चुकी हूं, लेकिन क्या आप postgreSQL में गतिशील एसक्यूएल के लिए कोई अच्छा ट्यूटोरियल सुझा सकते हैं? मुझे कोई नहीं मिला। मैं एक में एक गतिशील क्वेरी बनाना चाहता हूँ। यदि आप चाहते हैं तो [यह] जांचें (https://stackoverflow.com/questions/48216935/pl-pgsql-for-all-in-one- गतिशील- प्रश्न) प्रश्न। धन्यवाद – slevin