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

पोस्टग्रेज में गतिशील एसक्यूएल क्वेरी

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 . का इस्तेमाल करना चाहिए ।



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. IRI कार्यक्षेत्र में PostgreSQL से कनेक्ट करना

  2. PostgreSQL में डुप्लिकेट रिकॉर्ड कैसे खोजें

  3. बेंचमार्क संग्रह के साथ PostgreSQL परीक्षण टूल में अपडेट

  4. पोस्टग्रेएसक्यूएल में मिन () फ़ंक्शन

  5. आप PostgreSQL में केवल-पढ़ने के लिए उपयोगकर्ता कैसे बनाते हैं?