Pelos comentários, finalmente acho que entendi. Você precisa de SQL dinâmico :
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;
Esteja ciente, no entanto, que esta configuração está aberta para injeção de SQL . Use somente entrada verificada. Uma função funciona no PostgreSQL 8.3 também (sem
DO
declarações, ainda). Você não pode fazer referência a parâmetros dentro do SQL dinâmico (
EXECUTE
declaração). Você tem que colocar o valor na string de consulta. No PostgreSQL 8.4 ou posterior você tem a mercadoria superior do
USING
cláusula
. Infelizmente, não na versão 8.3. Você deve considerar a atualização, se puder. Eu coloquei uma solução alternativa para sua versão antiga. Você tem que tomar cuidado especial com o
NULL
valor.