[firebase-br] procedure com EXECUTE STATEMENT e IF COMPLEXO = erro

andre conrado acf.andre em gmail.com
Qua Jan 5 12:16:00 -03 2011


Minha primeira impressão e que a variável sqloperacao não cabe toda a string.

Em 28/12/10, Marcos Weimer<marcosweimer em gmail.com> escreveu:
> Tenho um procedure que cria as triggers para fazer a auditoria do banco
>
> em um determinado momento gero essa parte do codigo...
>
>  sqloperacao = sqloperacao || 'if (' || ascii_char(13);
>   sqloperacao = sqloperacao || '  ((Oper = ''Inclusão'') and (log_i =
> ''S''))' || ascii_char(13);
>   sqloperacao = sqloperacao || '  or ((Oper = ''Atualização'') and (log_u =
> ''S''))' || ascii_char(13);
>   sqloperacao = sqloperacao || '  or ((Oper = ''Exclusão'') and (log_d =
> ''S''))' || ascii_char(13);
>   sqloperacao = sqloperacao || ') then' || ascii_char(13);
>   sqloperacao = sqloperacao || 'begin' || ascii_char(13);
>   sqloperacao = sqloperacao || 'EXECUTE PROCEDURE LOG_GRAVAR_OPERACAO
> (:USER_NAME,''' || :tabela || ''', :oper,' || ascii_char(13);
>
> e depois de mais algumas linhas.... execute statement
>
> até ai tudo bem, o problema é quando vou rodar a procedure para gerar a
> trigger.... ai vem o erro...
>
> Arithmetic overflow or division by zero has occurred.
> arithmetic exception, numeric overflow, or string truncation.
> string right truncation.
> At procedure 'LOG_CRIAR_TRIGGER' line: 125, col: 3.
>
> se deixo o codigo da proc. dessa forma (removento parte da condição do IF)
>
>   sqloperacao = sqloperacao || 'if (' || ascii_char(13);
>   sqloperacao = sqloperacao || '  ((Oper = ''Inclusão'') and (log_i =
> ''S''))' || ascii_char(13);
>   sqloperacao = sqloperacao || ') then' || ascii_char(13);
>   sqloperacao = sqloperacao || 'begin' || ascii_char(13);
>   sqloperacao = sqloperacao || 'EXECUTE PROCEDURE LOG_GRAVAR_OPERACAO
> (:USER_NAME,''' || :tabela || ''', :oper,' || ascii_char(13);
>
> funciona.
> Detalhe que tenho uma trigger que tem esse IF da mesma forma que passei para
> a SP e funciona.
>
> alguma sugestão?
>
>
>
> --
> -=Ma®©oS=-
> Marcos R. Weimer
> Puma GTE 1974 Tubarão
> ______________________________________________
> FireBase-BR (www.firebase.com.br) - Hospedado em www.locador.com.br
> Para saber como gerenciar/excluir seu cadastro na lista, use:
> http://www.firebase.com.br/fb/artigo.php?id=1107
> Para consultar mensagens antigas: http://firebase.com.br/pesquisa
>


-- 
Um Abraço,
André Conrado.

055 21 8840-6232 - Oi
055 21 7856-8125 - NextTel ID:55*83*16416
055 21 9896-5449 - Vivo (apenas mensagens SMS)




Mais detalhes sobre a lista de discussão lista