Retornar Todos los campos de la tabla (Funcion PostgreSql)

publicado por: Anonymous

Como puedo hacer para que una función o Procedimiento almacenado de postgresql me retorne todas las columnas de la tabla sin tener que especificarlas. Quiero lograr el comportamiento de los Sp de consulta de Sql Server. Con el código que muestro, me da el error ERROR: la lista de definición de columnas es obligatoria para funciones que retornan «record»

    CREATE OR REPLACE FUNCTION sp_consulta_topes(IN text character varying,idObraSocial integer, idPlan Integer)
      RETURNS SETOF record AS
    $BODY$
    declare
     r RECORD;
    BEGIN
     FOR r IN
        Select * from vw_topes 
        where (upper(grupo_practicas) like '%'|| upper(regexp_replace ($1,' ','%', 'g' )) || '%'
         or 
         upper(practica_n) like '%'|| upper(regexp_replace ($1,' ','%','g' )) || '%' 
        or
        upper(practica) like '%'|| upper($1) || '%' )
        and (fecha_baja is null or fecha_baja>current_date)
        and id_obra_social=COALESCE(idObraSocial, id_obra_social) and id_plan=COALESCE(idPlan, id_plan)
     loop
       return next r;
     end loop;

    END;

    $BODY$
LANGUAGE plpgsql VOLATILE 

solución

En lugar de devolver SETOF record deberías devolver SETOF <tu tabla>. Este código debería funcionar:

CREATE OR REPLACE FUNCTION sp_consulta_topes(IN text character varying,idObraSocial integer, idPlan Integer)
RETURNS SETOF vw_topes AS
$BODY$
BEGIN
    RETURN query
        Select * from vw_topes 
        where (upper(grupo_practicas) like '%'|| upper(regexp_replace ($1,' ','%', 'g' )) || '%'
         or 
         upper(practica_n) like '%'|| upper(regexp_replace ($1,' ','%','g' )) || '%' 
        or
        upper(practica) like '%'|| upper($1) || '%' )
        and (fecha_baja is null or fecha_baja>current_date)
        and id_obra_social=COALESCE(idObraSocial, id_obra_social) and id_plan=COALESCE(idPlan, id_plan);

END;

$BODY$
LANGUAGE plpgsql VOLATILE 
Respondido por: user227

Leave a Reply

Your email address will not be published. Required fields are marked *