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

शर्त युक्त स्ट्रिंग के साथ अगर-कथन

टिप्पणियों से मुझे अंत में लगता है कि मैं समझता हूं। आपको डायनेमिक SQL चाहिए :

CREATE OR REPLACE FUNCTION foo(lastcontact timestamptz)
  RETURNS void AS
$func$
DECLARE
   myrec  record;
   mycond boolean;
BEGIN

FOR myrec IN
    SELECT * FROM tabel ORDER BY colorlevel, volgnummer
LOOP
    IF myrec.conditie ~~ '%lastcontact %' THEN   -- special case for input param
        myrec.conditie := replace (myrec.conditie
                        , 'lastcontact '
                        , CASE WHEN lastcontact IS NULL THEN 'NULL '
                          ELSE '''' || lastcontact::text || ''' ' END);
    END IF;

    EXECUTE 'SELECT ' || myrec.conditie || ' FROM tabel' INTO mycond;

    IF mycond then
        RAISE NOTICE 'Condition % is true', myrec.conditie;
    ELSE
        RAISE NOTICE 'Condition % is false', COALESCE(myrec.conditie, 'NULL');
    END IF;
END LOOP;

END
$func$  LANGUAGE plpgsql;

हालांकि, जागरूक रहें कि यह सेटअप SQL इंजेक्शन के लिए व्यापक रूप से खुला है . केवल सत्यापित इनपुट का उपयोग करें। PostgreSQL में एक फ़ंक्शन काम करता है 8.3 साथ ही (कोई DO . नहीं बयान, अभी तक)।

आप डायनेमिक SQL (EXECUTE . के अंदर पैरामीटर का उल्लेख नहीं कर सकते हैं बयान)। आपको क्वेरी स्ट्रिंग में मान डालना होगा।

PostgreSQL 8.4 या बाद के संस्करण में आपके पास USING खंड . काश, संस्करण 8.3 में नहीं। यदि आप कर सकते हैं तो आपको अपग्रेड करने पर विचार करना चाहिए।

मैंने आपके पुराने संस्करण के लिए वर्कअराउंड रखा है। आपको NULL . का विशेष ध्यान रखना होगा मूल्य।




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. pgsql वापसी तालिका त्रुटि:स्तंभ संदर्भ अस्पष्ट है

  2. पोस्टग्रेज के रूप में लॉग इन किया गया लेकिन त्रुटि निर्माता प्राप्त करना:नई भूमिका का निर्माण विफल:त्रुटि:सुपरयूसर बनाने के लिए सुपरयुसर होना चाहिए

  3. PostgreSQL में स्ट्रिंग केस को कैसे बदलें

  4. क्या रेल डिफ़ॉल्ट टाइमस्टैम्प को Y-m-d H:i:s (Y-m-d H:i:s.u के बजाय) में बदलने का कोई तरीका है या लार्वा Y-m-d H:i:s.u के दशमलव भाग को अनदेखा करता है?

  5. Postgresql के लिए लेन-देन संगामिति के लिए टेस्ट स्क्रिप्ट