Trigger no Oracle não executa

07/01/2004

0

Olá pessoal !!!

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

Pablopn

Responder

Posts

07/01/2004

Motta

triggers são disparadas independente da aplicação que alterou a tabela.

a trigger está habilitada (enabled) ?

há algo no código que trate user ou aplicação ?


Responder

07/01/2004

Pablopn

Não existe nenhuma restrição quanto a usuário ou aplicação.

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 !!!


Responder

07/01/2004

Orlandodias

Parece que vc criou um trigger BEFORE UPDATE, quando DEVERIA ser BEFORE UPDATE E BEFORE INSERT.

Na sua útima mensagem parece que vc está disparando um INSERT e não um UPDATE.

Sds,

OD


Responder

07/02/2006

Fabio Colli

Eu estou com este mesmo problema, um trigger no BEFORE UPDATE, pelo PL/SQL o trigger funciona perfeitamente, porém quando executo na aplicação no funciona. Detalhe, não uso post, como tenho um FrameWork, ele pega os campos que estão sendo alterados e monta um script de UPDATE: ´UPDATE NOME_TABELA SET NOME_CAMPO WHERE CHAVES´ e executa através do componente Query.


Responder

14/11/2019

Henrique Silveira

Caros, sei que é uma dúvida antiga, más caso alguém leia isso com o mesmo problema, veja se isso ajuda:

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.
Responder

14/11/2019

Henrique Silveira

Caros, sei que é uma dúvida antiga, más caso alguém leia isso com o mesmo problema, veja se isso ajuda:

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
Responder

Assista grátis a nossa aula inaugural

Assitir aula

Saiba por que programar é uma questão de
sobrevivência e como aprender sem riscos

Assistir agora

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar