disparo de trigger

Dúvidas, dicas e truques de PL/SQL. Aqui também vão assuntos relacionados a pacotes, triggers, funções, Java-Stored Procedures, etc
Responder
edu4rdo
Rank: Estagiário Pleno
Rank: Estagiário Pleno
Mensagens: 3
Registrado em: Seg, 08 Ago 2005 3:20 pm
Localização: Tijucas/SC

Minha dúvida é a seguinte: uma trigger será disparada somente após o commit de uma ação, ou seja, quando ocorrer rollback a trigger não é acionada??

Alguém poderia me explicar este caso?!? Valeu! :wink:
Avatar do usuário
dr_gori
Moderador
Moderador
Mensagens: 5024
Registrado em: Seg, 03 Mai 2004 3:08 pm
Localização: Portland, OR USA
Contato:
Thomas F. G

Você já respondeu a dúvida de alguém hoje?
https://glufke.net/oracle/search.php?search_id=unanswered

Não.
Se for trigger AFTER INSERT, UPDATE, DELETE ela é rodada DEPOIS do INSERT, UPDATE ou DELETE. (pra cada linha, individualmente!)

Se for trigger BEFORE, roda antes.

Exemplo:
TRIGGER AFTER UPDATE: Pra cada linha que é feito update, a trigger é disparada -> logo após a alteração de cada linha. Não é só no commit.
edu4rdo
Rank: Estagiário Pleno
Rank: Estagiário Pleno
Mensagens: 3
Registrado em: Seg, 08 Ago 2005 3:20 pm
Localização: Tijucas/SC

dr_gori, obrigado pelo interesse na minha questão.

Aproveitando, gostaria de saber mais nos casos de rollback.
Tenho como efetuar uma ação prevista numa trigger somente nos casos de commit, ou seja, ignorando os casos quando forem rollback?

Obrigado!
Avatar do usuário
dr_gori
Moderador
Moderador
Mensagens: 5024
Registrado em: Seg, 03 Mai 2004 3:08 pm
Localização: Portland, OR USA
Contato:
Thomas F. G

Você já respondeu a dúvida de alguém hoje?
https://glufke.net/oracle/search.php?search_id=unanswered

É possível com AUTONOMOUS_TRANSACTION (dá uma pesquisada no forum)
Ou seja, a trigger roda em OUTRA sessão. Se você fizer rollback, não fará diferença nenhuma na outra sessão.

Mas cuidado, esse tipo de coisa deve ser BEM pensado e principalmente BEM TESTADO. Lembre-se que, nesse caso, você não pode inserir linhas em uma tabela FILHA, pois quando você der ROLLBACK dará problema. (você estará fazendo rollback só da tabela pai e não da filha, saca?)

O que você quer fazer com isso? Algum tipo de LOG?
Explique o que você quer fazer que o povo aqui costuma dar uma dica!
edu4rdo
Rank: Estagiário Pleno
Rank: Estagiário Pleno
Mensagens: 3
Registrado em: Seg, 08 Ago 2005 3:20 pm
Localização: Tijucas/SC

O meu caso é de sincronização entre o Oracle e o Active Directory. Quando um cadastro for alterado/inserido no banco de dados, quero que o AD também seja alterado.
Porém só quero disparar o meu WebService (responsável pela sincronização) quando for efetivado o commit.
E aí que mora minha dúvida. Quando saber que foi realmente feito o commit através de trigger ??
Responder
  • Informação
  • Quem está online

    Usuários navegando neste fórum: Nenhum usuário registrado e 14 visitantes