EXECUTE ... USING
केवल PL/PgSQL में काम करता है - यानी फ़ंक्शंस के भीतर या DO
PL/PgSQL भाषा में लिखे गए ब्लॉक। यह सादे एसक्यूएल में काम नहीं करता है; EXECUTE
सादे एसक्यूएल में तैयार बयानों को क्रियान्वित करने के लिए पूरी तरह से अलग है। आप डायनेमिक SQL का उपयोग सीधे PostgreSQL की SQL बोली में नहीं कर सकते।
तुलना करें:
- PL/PgSQL का
EXECUTE ... USING
; करने के लिए - एसक्यूएल का
EXECUTE
मेरे पिछले उत्तर में दूसरा अंतिम पैरा देखें।
पीएल/पीजीएसक्यूएल को छोड़कर नहीं चलने के अलावा आपका एसक्यूएल स्टेटमेंट गलत है, यह वह नहीं करेगा जो आप उम्मीद करते हैं। अगर (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
want चाहते हैं या "result_42_table"
. आपको कुछ और लिखना होगा जैसे:
EXECUTE format('SELECT * from %s', quote_ident('result_'||(select id from ids where condition = some_condition)||'_table'))
... अगर आपको quote_ident
. का इस्तेमाल करना चाहिए ।