Re: [pgbr-geral] Possivel bug no pg

2013-06-10 Por tôpico Jean Domingues
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-06-10 Por tôpico Matheus de Oliveira
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

2013-06-08 Por tôpico Euler Taveira
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-06-08 Por tôpico Matheus de Oliveira
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

2013-06-07 Por tôpico Jean Domingues
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