Re: [pgbr-geral] Possivel bug no pg
Cadê um teste que comprove o possível bug? Uso a versão 9.1.1 64 bits no Windows 7 64. Antes de dizer que é um bug teste pelo menos na *última* versão corretiva (atualmente 9.1.9). Euler Taveira Timbira - http://www.timbira.com.br/ PostgreSQL: Consultoria, Desenvolvimento, Suporte 24x7 e Treinamento Oi Euler, tentei reproduzir com uma função mais simples, mas não consegui. Se não se importa, estou colando a função com o erro abaixo. Vou atualizar a versão pra ver se resolve. De qualquer forma, só queria se saber se não sou eu que não estou entendo o mecanismo de error trapping. Comentei na função onde o erro ocorreu e o insert que deveria ter sido voltado pra trás, mas não foi. O erro que aconteceu naquele ponto foi tratado no único exception when other. Realmente não consegui reproduzir. CREATE OR REPLACE FUNCTION public.sp_cobranca_processar_arquivo ( psequencia integer, pdataprocessamento date, pconteudo text, pregistros text ) RETURNS integer AS $body$ DECLARE regCR contas_receber; xBoleto varchar; xDataCred date; xDesc numeric; xJuros numeric; xAcresc numeric; xMulta numeric; xAbat numeric; xVlrRem numeric; xVlrPago numeric; xIdArquivo integer; xMsg text; xTxt text; regBx record; BEGIN -- pregistros: boleto;;data_credito;;multa;;juros;;acrescimos;;desconto;;abatimento;;pago[#$] if psequencia is null then return 0; end if; select nextval('seq_cobranca_arquivo') into xIdArquivo; insert into cobranca_arquivo(id,data_import_geracao,tipo_arquivo, - insert que deveria ter tipo rollback sequencial,data_processamento,conteudo) values(xIdArquivo,CURRENT_TIMESTAMP,'2',psequencia,pdataprocessamento, pconteudo); xMsg = ''; -- pregistros: boleto;;data_credito;;multa;;juros;;acrescimos;;desconto;;abatimento;;pago[#$] for xBoleto,xDataCred,xMulta,xJuros,xAcresc,xDesc,xAbat,xVlrPago in select c1::varchar,c2::date,c3::numeric,c4::numeric,c5::numeric, c6::numeric,c7::numeric,c8::numeric from sp_texto_to_record(pregistros) loop if xMsg '' then xMsg = trim(xMsg) || E'\r\n'; end if; select * from contas_receber x where x.boleto = xBoleto::integer order by id desc limit 1 -- apenas o ultimo into regCR; - o erro aconteceu bem aqui if not found then xMsg = xMsg || '- (Erro) Boleto ' || xBoleto || ' não localizado'; continue; elseif regCR.data_pagto is not null then xMsg = xMsg || '- (Aviso) Boleto ' || xBoleto || ' já está baixado'; continue; end if; begin -- consolidar todas as remanescentes na c.r. a baixar select array_to_string(array(select ret_id from sp_qry_contas_receber_remanesc(regCR.id)),'#$') into xTxt; if coalesce(xTxt,'') '' then perform sp_gravar_contas_remanescentes(regCR.id, xTxt); end if; select * from sp_qry_contas_receber(null,null,null,null,null,null, null,regCR.id,xDataCred,null) into regBx; -- atualizado -- baixar xJuros = xJuros + xMulta + xAcresc; if xJuros regBx.ret_juros_devidos then xJuros = regBx.ret_juros_devidos; end if; xDesc = xDesc + xAbat; xVlrRem = regBx.ret_valor + regBx.ret_valor_residual + xJuros - xDesc - xVlrPago; if xVlrRem 0 then xVlrRem = 0; end if; update contas_receber set desconto = xDesc, juros = xJuros, valor_remanesc = xVlrRem, data_pagto = xDataCred, id_arquivo_retorno = xIdArquivo where id = regCR.id; xMsg = xMsg || '- Boleto ' || xBoleto || ' baixado com sucesso'; exception when others then xMsg = xMsg || '- (Erro) Boleto ' || xBoleto || ' - ' || sqlerrm; end; end loop; update cobranca_arquivo set historico = trim(xMsg) where id = xIdArquivo; return xIdArquivo; END; $body$ LANGUAGE 'plpgsql' VOLATILE CALLED ON NULL INPUT SECURITY INVOKER COST 100; ___ pgbr-geral mailing list pgbr-geral@listas.postgresql.org.br https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
Re: [pgbr-geral] Possivel bug no pg
2013/6/10 Jean Domingues ejdom...@yahoo.com.br Cadê um teste que comprove o possível bug? Uso a versão 9.1.1 64 bits no Windows 7 64. Antes de dizer que é um bug teste pelo menos na *última* versão corretiva (atualmente 9.1.9). Euler Taveira Timbira - http://www.timbira.com.br/ PostgreSQL: Consultoria, Desenvolvimento, Suporte 24x7 e Treinamento Oi Euler, tentei reproduzir com uma função mais simples, mas não consegui. Se não se importa, estou colando a função com o erro abaixo. Vou atualizar a versão pra ver se resolve. De qualquer forma, só queria se saber se não sou eu que não estou entendo o mecanismo de error trapping. Comentei na função onde o erro ocorreu e o insert que deveria ter sido voltado pra trás, mas não foi. O erro que aconteceu naquele ponto foi tratado no único exception when other. Realmente não consegui reproduzir. (...) select * from contas_receber x where x.boleto = xBoleto::integer order by id desc limit 1 -- apenas o ultimo into regCR; - o erro aconteceu bem aqui Tem certeza *absoluta* que o erro ocorreu aí mesmo? Como sabe disso (se só capturou o sqlerrm abaixo)? Qual foi o erro? Pelo visto só a conversão de xBoleto para inteiro poderia causar um erro nesse comando (não)? Isso acontece (xBoleto não ter representação de inteiro)? (...) Atenciosamente, -- Matheus de Oliveira Analista de Banco de Dados Dextra Sistemas - MPS.Br nível F! www.dextra.com.br/postgres ___ pgbr-geral mailing list pgbr-geral@listas.postgresql.org.br https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
Re: [pgbr-geral] Possivel bug no pg
On 07-06-2013 21:59, Jean Domingues wrote: Percebi que, um erro em a, que deveria ter sido propagado para o chamador, foi capturado em c. Creio que seja por conta do bloco estar dentro de um loop, e algum ponteiro ter ficado preso neste exception trapping. Cadê um teste que comprove o possível bug? Uso a versão 9.1.1 64 bits no Windows 7 64. Antes de dizer que é um bug teste pelo menos na *última* versão corretiva (atualmente 9.1.9). -- Euler Taveira Timbira - http://www.timbira.com.br/ PostgreSQL: Consultoria, Desenvolvimento, Suporte 24x7 e Treinamento ___ pgbr-geral mailing list pgbr-geral@listas.postgresql.org.br https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
Re: [pgbr-geral] Possivel bug no pg
2013/6/7 Jean Domingues ejdom...@yahoo.com.br Pessoal, acho que encontrei um bug no pg. Não sei se é aqui que eu deveria postar, mas talvez eu esteja enganado também. Tenho uma função como abaixo: begin a) for reg in select . loop begin b) exception when others then c) . end; end loop; end; Percebi que, um erro em a, que deveria ter sido propagado para o chamador, foi capturado em c. Creio que seja por conta do bloco estar dentro de um loop, e algum ponteiro ter ficado preso neste exception trapping. Uso a versão 9.1.1 64 bits no Windows 7 64. Tem como mostrar um exemplo funcional? Atenciosamente, -- Matheus de Oliveira Analista de Banco de Dados Dextra Sistemas - MPS.Br nível F! www.dextra.com.br/postgres ___ pgbr-geral mailing list pgbr-geral@listas.postgresql.org.br https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
[pgbr-geral] Possivel bug no pg
Pessoal, acho que encontrei um bug no pg. Não sei se é aqui que eu deveria postar, mas talvez eu esteja enganado também. Tenho uma função como abaixo: begin a) for reg in select . loop begin b) exception when others then c) . end; end loop; end; Percebi que, um erro em a, que deveria ter sido propagado para o chamador, foi capturado em c. Creio que seja por conta do bloco estar dentro de um loop, e algum ponteiro ter ficado preso neste exception trapping. Uso a versão 9.1.1 64 bits no Windows 7 64.___ pgbr-geral mailing list pgbr-geral@listas.postgresql.org.br https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral