2009/4/27 André Pignata <[email protected]>: > 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; >
Se você está montando uma string então transforme seu campo date em uma string para concatena-lo. ... and (vfaturatmp.dtvencto <= ''' || to_char(data_limite, 'YYYY-MM-DD') || '''::date);'; Osvaldo _______________________________________________ pgbr-geral mailing list [email protected] https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
