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

Marcos Weimer marcosweimer em gmail.com
Ter Dez 28 15:59:27 -03 2010


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



Mais detalhes sobre a lista de discussão lista