Boa tarde, blz ? Então, antes de Responder a primeira coisa que eu te digo é que, se REALMENTE vc não está com o parâmetro AUDIT_TRAIL apontando para DB (isso é o default, então normalmente está) eu te Recomendo que vc negocie uma janelinha de manutenção o quano antes e implemente a Auditoria de banco, mesmo : hoje tudo bem, vc quer só logon & logoff, que é uma coisa que vc pode obter via trigger facilmente, mas COM CERTEZA daqui a pouco neguim VAI te exigir informação de logins falhados, Objetos acessados durante a sessão (pra ver se tem alguém acessando dados confidenciais que não tem direito) e coisas assim, que vc não consegue obter facilmente sem a Auditoria... Aviso/recomendação feita, a resposta : a msg de erro ("ORA-01438: valor maior que a precisão especificada usado para esta coluna") é BEM clara e específica, vc está tentando carregar numa variável ou coluna de tabela um valor que ultrapassa o comprimento/precisão previstos.... No seu caso, como (olhando por cima o código que vc mostra) não vi nenhum carregamento direto em variável (ie, vc não te SELECT coluna INTO variável, FETCH, nem atribuição tipo variavel := valor), é um dos INSERTs ou dos UPDATEs que tá botando um valor muito grande.... Fosse um código extremamente complexo e longo, onde não é humanamente possível/viável se encontrar os SQLs possíveis causadores, eu diria pra vc fazer um trace OU setar um evento de dump, mas como não é tão longo, eu diria para vc analisar um pouco o código, descobrir qual DML carrega valores em quais colunas E então comparar o comprimento/precisão da fonte com as colunas... Por exemplo, o UPDATE seguinte :
UPDATE stats$user_log SET last_action = (SELECT action FROM v$session.... tá buscando o valor da coluna ACTION na V$SESSION e botando na coluna LAST_ACTION da STAT$USER_LOG - dá um desc na V$SESSION, um desc na STAT$USER_LOG e compare a coluna ACTION com a LAST_ACTION, se a coluna da STAT$USER_LOG for menor, aumente-a.... Idem para as outras colunas, okdoc ?? []s Chiappa