Hola de nuevo Huesos
Mira al final la función me quedó así y funciona perfecto
Código:
CREATE OR REPLACE FUNCTION BuscarAreas(estado boolean) RETURNS SETOF tbl_area_tematica AS $$
DECLARE
datos tbl_area_tematica%rowtype;
sql TEXT := 'SELECT area_tem_id, area_tem_nombre, area_tem_activa FROM tbl_area_tematica';
sqlEstado TEXT;
BEGIN
IF ( estado=TRUE ) THEN
sql = sql || ' WHERE area_tem_activa=TRUE';
ELSE
sql = sql || ' WHERE area_tem_activa=FALSE';
END IF;
FOR datos IN EXECUTE sql LOOP
RETURN NEXT datos;
END LOOP;
RETURN;
END
$$ LANGUAGE plpgsql VOLATILE;
Sin embargo estuve mirando la documentación y encontré la función EXECUTE.. INTO...USING, la intenté usar pero me funcionaba sólo al no pasar el parámetro, si le paso el parámetro no me devuelve nada. Había quedado así:
Código:
CREATE OR REPLACE FUNCTION BuscarAreas(estado boolean) RETURNS SETOF tbl_area_tematica AS $$
DECLARE
datos tbl_area_tematica%rowtype;
sql TEXT := 'SELECT area_tem_id, area_tem_nombre, area_tem_activa FROM tbl_area_tematica';
sqlEstado TEXT;
BEGIN
IF ( estado<>NULL ) THEN
sql = sql || ' WHERE area_tem_activa=$1';
END IF;
EXECUTE sql INTO datos USING estado;
END
$$ LANGUAGE plpgsql VOLATILE;
Desplegué la consulta por pantalla y estaba OK, lo único que se me ocurre es que no se haya realizado bien el reemplazo del parámetro, que según entiendo es la fortaleza de usar EXECUTE
¿Algún comentario con respecto a la última función?
Saludos y muchas gracias de nuevo
Rodrigo
PD: ¿Cómo posteo el código en formato SQL? (como lo pusiste en la respuesta), gracias