Trigger no Oracle não executa
07/01/2004
0
Estou tendo um probleminha com triggers no Oracle.
Eu implementei um trigger before update para que impor algumas regras de negócio. Quando faço um update pelo Toad ou SQLPlus para testar se a regra está implementada corretamente, o trigger funciona e barra a transação.
Porém se faço esta mesmo update pela aplicação que é em Delphi (Conexão ADO e componente ADOQuery) o trigger não funciona e o update é realizado.
Alguém saberia dizer o porque que esta alteração não está passando pelo trigger e assim possa me ajudar ?
Obrigado !
Pablopn
Posts
07/01/2004
Motta
a trigger está habilitada (enabled) ?
há algo no código que trate user ou aplicação ?
07/01/2004
Pablopn
A tela de cadastro tem apenas um grid e dois botões : Inserir e Confirmar. No botão ´inserir´ eu chamo o método Insert para inserir um registro novo no componente ADOQuery.
No botão ´confirmar´ eu uso o Post do ADOQuery para commitar as alterações no banco.
Nesse momento que executo o Post, o trigger não é disparado e a transação é confirmada quando o correto era que fosse revertida pela regra imposta no trigger.
Existe alguma propriedade no objeto de Conexão ou na Query que eu tenha que modificar ?
Desde já, obrigado !!!
07/01/2004
Orlandodias
Na sua útima mensagem parece que vc está disparando um INSERT e não um UPDATE.
Sds,
OD
07/02/2006
Fabio Colli
14/11/2019
Henrique Silveira
Pode ser um problema visibilidade de user, exe:
se vc criar um trigger assim :
CREATE OR REPLACE TRIGGER <SEU USUARIO>.NOME_TRIGGER, pode ser que a aplicação não se conecta no banco com esse usuário e por isso ela ignora.
Por isso se vc conecta no banco via sqlplus e teste o trigger, o usuário é afetado e o gatilho funciona.
experimente fazer assim:
CREATE OR REPLACE TRIGGER NOME_TRIGGER, sem o user.
Espero poder ter contribuído.
14/11/2019
Henrique Silveira
Pode ser um problema visibilidade de user, exe:
se vc criar um trigger assim :
CREATE OR REPLACE TRIGGER <SEU USUARIO>.NOME_TRIGGER, pode ser que a aplicação não se conecta no banco com esse usuário e por isso ela ignora.
Por isso se vc conecta no banco via sqlplus e teste o trigger, o usuário é afetado e o gatilho funciona.
experimente fazer assim:
CREATE OR REPLACE TRIGGER NOME_TRIGGER, sem o user.
Espero poder ter contribuído.
Outro ponto que deve ser válido verificar é que a aplicação pode fazer um:
DELETE FROM table
WHERE campo1 = ''XX''
RETURNING campo1,campo2,campo3 INTO :O0 ,:O1 ,:O2;
e inserir os dados.
Pode validar na
select distinct sql_text from gv$sql where upper(sql_text) like ''%table%''; todas as instruções que chegaram na tabela em questão.
Espero poder ter contribuído
Clique aqui para fazer login e interagir na Comunidade :)