CREATE OR REPLACE FUNCTION wiremodule(_carline TEXT, _part TEXT, _module TEXT) RETURNS TABLE(drawingno text, wirename text) AS $$ DECLARE i INTEGER; sql TEXT; cat TEXT; BEGIN sql := format('SELECT drawingno::text, wirename::text FROM wire WHERE carline=%L AND part=%L AND (' , _carline, _part); cat := ''; FOR i IN 1..4 LOOP sql := sql || cat || format('functionmodule%s=%L', i , _module); cat := ' OR '; END LOOP; sql := sql || ')'; RETURN QUERY EXECUTE sql; END; $$ LANGUAGE 'plpgsql';