Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Adilson JC

Criando trigger dinãmica

Recommended Posts

Ola colegas, tenho um problema que está dificil encontrar solução, fiz uma procedure para criar trigger dinãmica, neste caso uma trigger de insert e update, até ai tudo bem, ela cria a trigger e consultando no dicionário a mesmo fica válida e habilitada, porém fazendo um teste simples de update o banco não passa pela a trigger, simplesmente a ignora.Ja tentei usar alter trigger recompila no final da procedure mas sem sucesso, ela só passa a funcionar quando recompila através de algum utilitário do banco, como plsqldeveloper, Enterprise manager.alguém tem alguma dica...obrigado....

Compartilhar este post


Link para o post
Compartilhar em outros sites

Publica o código da procedure, pode ajudar pois pela sua descrição do problema fica difícil descobrir qual pode ser o problema.

 

Mais em todo caso algumas perguntas ?

 

É gerado um script ou o código é gerado via EXECUTE ?

 

Já checou o código gerado ?

 

Já tentou colocar um dbms_output na trigger e rodar para ver se é exibido na 1º vez ?

 

Existe alguma condição que faça a trigger não executar nada ?

 

A criação , execução é compilação são feitos pelos mesmo owners/users ?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Motta, realmente não havia feito o teste com put_line, fiz alguns testes e aparentemente a trigger esta funcionando normalmente, ufa,estava sofrendo em vão, pois o teste que estava fazendo era com o debugador, verificando linha a linha do código, e o debugador não conseguia debugar, ai com o teste que você sugeriu verifiquei que quando crio a trigger via minha procedure que usa "execute immediate" o debugador não funciona, estranho né, só funciona quando crio via sqlplus ou algum outro utilitário.valeu mesmo, me ajudou muito.mas aproveitando, estava tentando fazer com que a procedure compile a trigger e funcione até com o debug, então tentei a seguinte estratégia:na minha procedure, deixei faltando o ";" no final do código de criação da trigger para deixa-la inválidadepois adicionei-o com um update na tabela trigger$ no campo action#, onde fica a definição da trigger, assim:Update sys.Trigger$ Set Action# = v_action||';' Where Trigger$.Obj# = idObj;onde na variavel v_action contém a definição da trigger que busquei na propria tabela trigger$mas mesmo assim, simplesmente executando um alter trigger compile, continua dando erro como se não existisse o ";" no final, sendo que puxando a ddl do objeto fica com o caracter no final normalmente e consigo compilar sem erros via sqlplus ou utilitário.Será que tem alguma outra maneira de fazer o alter trigger compile funcionar fazendo este update na "trigger$" ou tem outra tabela que tenho que fazer update também para que funcione ? ja tentei encontrar outra tabela do owner sys que possui a ddl do objeto mas não encontrei nada mais além da trigger$ para fazer este update, ou este método que estou tentando não é indicado ?Valeu pela ajuda..

Compartilhar este post


Link para o post
Compartilhar em outros sites

O objeto que tem o código é o dba_sources (user_source) até a 8i (acho) não guardava o código da trigger.

 

Nunca debuguei trigger , não sei como fazer isto.

 

Acho que o execute immediate não debuga pois roda em paralelo.

 

Mas já que funcionou, deixa queito...

Compartilhar este post


Link para o post
Compartilhar em outros sites

no caso o debug da trigger faço através do PlSqlDeveloper, para testa-la, mas tem razão, pra que complicar se ja esta funcionando, valeu pela ajuda amigo.

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.