コメントから、ようやく理解できたと思います。 動的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インジェクションに対して広く開かれていることに注意してください。 。検証済みの入力のみを使用してください。関数はPostgreSQL8.3で機能します 同様に(DO
はありません まだステートメント)。
動的SQL内のパラメーターを参照することはできません(EXECUTE
声明)。値をクエリ文字列に入力する必要があります。
PostgreSQL 8.4以降では、 USING
条項
。残念ながら、バージョン8.3にはありません。可能であれば、アップグレードを検討する必要があります。
私はあなたの古いバージョンの回避策を入れました。 NULL
には特別な注意を払う必要があります 値。