टिप्पणियों से मुझे अंत में लगता है कि मैं समझता हूं। आपको डायनेमिक 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
. का विशेष ध्यान रखना होगा मूल्य।