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

संग्रहीत कार्यविधि में संग्रहीत कार्यविधि को कॉल करना

COPY थोड़ा अजीब है क्योंकि यह अपनी query . के साथ व्यवहार करता है एक स्ट्रिंग के रूप में तर्क, भले ही इसे एक स्ट्रिंग के रूप में नहीं लिखा गया हो। नतीजा यह है कि query :

SELECT * FROM retrieve_info($1, $2)

फ़ंक्शन के संदर्भ में निष्पादित नहीं किया जाता है, इसे COPY के संदर्भ में ही निष्पादित किया जाता है। भले ही आप कहें:

copy (select * from t) ...

इसके साथ ऐसा व्यवहार किया जाता है जैसे आपने लिखा हो:

copy 'select * from t' ...

इसलिए जब तक क्वेरी निष्पादित की जाती है, तब तक फ़ंक्शन पैरामीटर का कोई अर्थ नहीं रह जाता है, query COPY के लिए तर्क ऐसा लग सकता है कि यह अन्य भाषाओं में बंद होने जैसा व्यवहार करेगा, लेकिन ऐसा नहीं है, यह एक स्ट्रिंग की तरह अधिक कार्य करता है जो eval को पास हो जाता है ।

आप लास्ट रिजॉर्ट के सामान्य क्लज:डायनेमिक एसक्यूएल का उपयोग करके इस विचित्रता को दूर कर सकते हैं। यदि आप स्ट्रिंग रैंगलिंग और EXECUTE का उपयोग करने के लिए अपना फ़ंक्शन लिखते हैं तो आपको बेहतर परिणाम प्राप्त होने चाहिए:

create or replace function print_out(text, text) returns void as $$
begin
    execute 'copy ('
         || 'select * from retrieve_info'
         ||     '(' || quote_literal($1) || ',' || quote_literal($2) || ')'
         || ') to ''myfilepath/test.csv'' with csv header;';
end;
$$ language plpgsql;


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Postgres . में LIKE और ~ के बीच अंतर

  2. PostgreSQL के लिए ऑडिट लॉगिंग

  3. PostgreSQL में एक अस्थायी फ़ंक्शन कैसे बनाएं?

  4. नया डेटा Postgres पर रेल सरणी स्तंभ के लिए जारी नहीं है

  5. पोस्टग्रेज़ के साथ डेटा डालें और विदेशी कुंजियाँ सेट करें