A resposta que o Vinícius me enviou ajudou muito só que estou tendo
problemas com ||, ele dá erro de typecast
ERROR: operator is not unique: unknown || date at character 199
Em outras funções em que utilizo o || ocorre o mesmo problema.
Abaixo segue um exemplo de função:
CREATE OR REPLACE FUNCTION "public"."acumula_fatura" (portadores_port
integer, tipotitulos_tptitulo integer, data_limite date, coduniop integer)
RETURNS numeric AS
$body$
/* New function body */
declare
rfaturatmp RECORD;
rfaturatmpdet RECORD;
rclitit record;
rMesFat record;
squery varchar;
sQMesFat varchar;
i integer;
begin
squery := 'select * from vfaturatmp where (vfaturatmp.status = ''S'')
and (vfaturatmp.ntitulo <> '''') and ((vfaturatmp.nfatura = '''') or
(vfaturatmp.nfatura is null)) and (vfaturatmp.dtvencto <=
'''||"data_limite"||''')';
if "portadores_port" <> 0 then
squery := squery||' and (vfaturatmp.clientesfat_portadores_port =
'||"portadores_port"||')';
end if;
if "tipotitulos_tptitulo" <> 0 then
squery := squery||' and (vfaturatmp.clientesfat_tipotitulos_tptitulo
= '||"tipotitulos_tptitulo"||')';
end if;
squery := squery|| ' order by dtvencto';
Raise notice '%', sQuery;
i := 0;
sQMesFat := 'select max(dtvencto)as dt,clientesfat_codcli from vfaturatmp
where (vfaturatmp.status = ''S'') and (vfaturatmp.ntitulo <> '''') and
((vfaturatmp.nfatura = '''') or (vfaturatmp.nfatura is null)) and
(vfaturatmp.dtvencto <= '''||"data_limite"||''')';
if "portadores_port" <> 0 then
sQMesFat := sQMesFat||' and (vfaturatmp.clientesfat_portadores_port
= '||"portadores_port"||')';
end if;
if "tipotitulos_tptitulo" <> 0 then
sQMesFat := sQMesFat||' and
(vfaturatmp.clientesfat_tipotitulos_tptitulo =
'||"tipotitulos_tptitulo"||')';
end if;
sQMesFat := sQMesFat||' group by clientesfat_codcli';
Raise notice '%', sQMesFat;
for rMesFat IN EXECUTE sQMesFat loop
raise notice '%-%',rMesFat.clientesfat_codcli,lpad(extract(month
from rMesFat.dt + interval '1 month' ),2,'0')||'/'||extract(year from
rMesFat.dt + interval '1 month');
update clienteplanopreco set mesfat = lpad(extract(month from
rMesFat.dt + interval '1 month' ),2,'0')||'/'||extract(year from rMesFat.dt
+ interval '1 month')
where clientes_codcli = (select * from
fatura_para(rMesFat.clientesfat_codcli,0)) and dtcanc is null;
end loop;
--raise exception 'chegou aqui';
FOR rfaturatmp IN EXECUTE squery loop
insert into fatura values
(rfaturatmp.filial_nfilial,
"coduniop",
rfaturatmp.ntitulo,
rfaturatmp.clientesfat_codcli,
rfaturatmp.clientesfat_coddep,
rfaturatmp.vlrliquido,
rfaturatmp.vlrbruto,
rfaturatmp.vlrdesc,
rfaturatmp.vlrmulta,
rfaturatmp.vlracresc,
rfaturatmp.dtemissao,
rfaturatmp.dtvencto,
null,
null,
null,
rfaturatmp.vlrirrf,
rfaturatmp.vlrimpostos,
null,
1,
extract(day from date (CAST(rfaturatmp.dtvencto AS DATE))),
rfaturatmp.vlrdesc,
rfaturatmp.vlracresc,
rfaturatmp.clientesfat_tipotitulos_tptitulo,
rfaturatmp.clientesfat_portadores_port);
--atualizando mes de faturamento
for rfaturatmpdet in select * from faturatmpdet where
faturatmpdet.faturatmp_clientesfat_codcli = rfaturatmp.clientesfat_codcli
and faturatmpdet.faturatmp_clientesfat_coddep =
rfaturatmp.clientesfat_coddep and faturatmpdet.faturatmp_dtvencto =
rfaturatmp.dtvencto loop
--gerando faturadet
select clientes.categoriascliente_codcateg,
clientes.categoriascliente_subcateg, clientes.grupos_codgrupo from clientes
where clientes.codcli = rfaturatmpdet.clientes_codcli and clientes.coddep =
0 into rclitit;
insert into faturadet values (
nextval('faturadet_codfaturadet_seq'),
rfaturatmp.filial_nfilial,
rfaturatmp.ntitulo,
null,
rfaturatmpdet.clienteplanopreco_planos_codplano,
rfaturatmpdet.qtde,
rfaturatmpdet."clienteplanopreco_valor_vlrbruto",
rfaturatmpdet.vlracresc,
rfaturatmpdet.vlrdesc,
rfaturatmpdet.vlrliquido,
rfaturatmpdet."clienteplanopreco_valor_vlrbruto",
0,
0,
rfaturatmpdet.vlrtaxaimplanta,
1,
rfaturatmp.numnf,
'N',
null,
rfaturatmpdet.clienteplanopreco_vendedores_codven,
rfaturatmpdet.clienteplanopreco_vendedores_codsup,
rfaturatmpdet.clienteplanopreco_vendedores_codger,
null,
null,
rclitit.categoriascliente_codcateg,
rclitit.categoriascliente_subcateg,
rclitit.grupos_codgrupo,
"coduniop",
rfaturatmpdet.clienteplanopreco_planos_codplano,
rfaturatmpdet.clientes_codcli,
rfaturatmpdet.clientes_coddep,
rfaturatmpdet.flag_taxaimplanta
);
RAISE NOTICE ' det é %', rfaturatmpdet.faturatmp_dtvencto;
end loop;
RAISE NOTICE 'fat e %', rfaturatmp.ntitulo;
i := i +1;
insert into contareceber values (
rfaturatmp.filial_nfilial,
"coduniop",
rfaturatmp.ntitulo,
null,
null,
null,
rfaturatmp.clientesfat_portadores_port,
rfaturatmp.clientesfat_codcli,
rfaturatmp.clientesfat_coddep,
rfaturatmp.clientesfat_tipotitulos_tptitulo,
rfaturatmp.ntitulo,
rfaturatmp.filial_nfilial,
"coduniop",
rfaturatmp.dtemissao,
rfaturatmp.dtvencto,
null,
rfaturatmp.clientesfat_grupos_codgrupo,
null,
rfaturatmp.vlracresc,
rfaturatmp.vlrdesc,
'N',
now(),
null,
null,
false,
rfaturatmp.vlrliquido,'C',null,rfaturatmp.parcela);
delete from faturatmp where faturatmp.clientesfat_codcli =
rfaturatmp.clientesfat_codcli and faturatmp.clientesfat_coddep =
rfaturatmp.clientesfat_coddep and faturatmp.dtvencto = rfaturatmp.dtvencto;
end loop;
return i;
end
$body$
LANGUAGE 'plpgsql' VOLATILE CALLED ON NULL INPUT SECURITY INVOKER;
_______________________________________________
pgbr-geral mailing list
[email protected]
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral