mira yo hice esta funcion CREATE OR REPLACE FUNCTION cg_buscar_cargo(m_tipo integer, m_dato character varying, m_codigo integer) RETURNS SETOF cargo AS $BODY$ DECLARE fila cargo%rowtype; sql character varying; m character varying; BEGIN --1:BUSCAR TODOS LOS REGISTROS IF m_tipo= 1 THEN sql = 'SELECT * FROM cargo ORDER BY cg_cod'; END IF; --2:BUSCAR REGISTROS DE ACUERDO AL NOMBRE O PARTE DE EL IF m_tipo = 2 THEN sql = 'SELECT * FROM cargo WHERE cg_nombre like ' || quote_literal($2) ; END IF; --3:BUSCAR REGISTROS DE ACUERDO AL CODIGO IF m_tipo=3 THEN sql = 'SELECT * FROM cargo WHERE cg_cod ='|| m_codigo; END IF;
FOR fila IN EXECUTE sql LOOP RETURN NEXT fila; END LOOP; RETURN; END; $BODY$ LANGUAGE 'plpgsql' VOLATILE COST 100 ROWS 1000; espero que te sirva de ejemplo -- Cesar Erices Vergara Ingeniero en Gestión Informática Analista de Sistema Santiago - Chile