Amigos tengo una duda,
En una funcion recibo algunos parametros para usarlos como filtros, algo asi

CREATE OR REPLACE FUNCTION reporte_ventas_grupo(
pgrupo_id varchar,
pfinicio date,
pffin date,
OUT pproducto character varying,
OUT ptotal numeric,
OUT pcantidad integer)
    RETURNS SETOF record
    LANGUAGE 'plpgsql'
    COST 100
    VOLATILE PARALLEL UNSAFE
    ROWS 1000
    .......

en el campo grupo id, viene los codigos seleccionados por el usuario de los 
grupos que desea ver en el reporte mas o menos viene un varchar de esta forma 
'1,4,6,8,12'

entonces quiero generar un select como este

select p.id,p.nombre,d.cantidad,d.precio
from ventas v
inner join ventasd d on v.id=d.venta_id
inner join productos p on d.producto_id=p.id
inner join grupos l on p.grupo_id=l.id
where v.fecha>=pfinicio and v.fecha<=pffin
and v.esactivo=1
and case when pgrupo_id='' then true else p.grupo_id in (pgrupo_id) end
order by p.nombre desc


Claro el select es un poco mas complicado, la funcion completa esta asi

CREATE OR REPLACE FUNCTION reporte_ventas_grupo(
pgrupo_id varchar,
pfinicio date,
pffin date,
OUT pproducto character varying,
OUT ptotal numeric,
OUT pcantidad integer)
    RETURNS SETOF record
    LANGUAGE 'plpgsql'
    COST 100
    VOLATILE PARALLEL UNSAFE
    ROWS 1000

AS $BODY$
DECLARE
rventas record;
vtotal numeric;
vcliente_id bigint;
vvendedor_id bigint;
BEGIN

for rventas in
select p.id,p.nombre,d.cantidad,d.precio
from ventas v
inner join ventasd d on v.id=d.venta_id
inner join productos p on d.producto_id=p.id
inner join grupos l on p.grupo_id=l.id
where v.fecha>=pfinicio and v.fecha<=pffin
and v.esactivo=1
and case when pgrupo_id='' then true else p.grupo_id in (pgrupo_id) end
order by p.nombre desc
loop
pproducto:=rventas.nombre;
ptotal:=round(rventas.precio,2);
pcantidad:=rventas.cantidad;
return next;
end loop;
return;
END;
$BODY$;


pero al ejecutar la funcion me da este error

ERROR:  el operador no existe: integer = character varying LINE 8: ... case 
when pgrupo_id='' then true else p.grupo_id in (pgrupo...

a la funcion la llamo asi

select * from reporte_ventas_test('11,4,6,8,12','2021-01-01','2023-01-01')

Como podria ejecutar el select con el parametro de grupo con varios codigos?

Saludos

Reply via email to