olá gente, estou com o seguinte problema.
Quando vou dar um update em uma tabela dá o erro: number of recursive SQL levels oracle.
Bom, já descrobi o porque, trigger que estão sendo chamadas recursiva.
Queria saber se tem como fazer algo assim
Só executa a trigger se o numero da chamada recursiva por 1. Ou algo parecido.
alguém conhece?
Number of recursive SQL levels oracle
-
- Rank: Programador Sênior
- Mensagens: 48
- Registrado em: Seg, 29 Mai 2006 1:24 pm
- Localização: Blumenau - SC
Abraços,
Henrique Machado Muller
Henrique Machado Muller
- dr_gori
- Moderador
- Mensagens: 5013
- 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
Você já respondeu a dúvida de alguém hoje?
https://glufke.net/oracle/search.php?search_id=unanswered
Acredito que você pode declarar uma variável numa package spec, inicializar com ZERO.
Ai cada vez que você inicia a trigger, você SOMA 1 nessa variável.
Então basta colocar um IF dentro da trigger. Se essa variável for 1, executa o que você precisa executar. (pois vai ser a primeira vez).
Se for <> 1 não faz nada.
No fim a trigger, diminui 1 dessa variável. (pra voltar a ser zero).
Como ele vai disparar denovo, ele vai somar 1 e a variável vai ser 2. Ou seja, na segunda vez, não vai executar.
OU seja, ele não vai chamar recursivamente a sua trigger.
Ai cada vez que você inicia a trigger, você SOMA 1 nessa variável.
Então basta colocar um IF dentro da trigger. Se essa variável for 1, executa o que você precisa executar. (pois vai ser a primeira vez).
Se for <> 1 não faz nada.
No fim a trigger, diminui 1 dessa variável. (pra voltar a ser zero).
Como ele vai disparar denovo, ele vai somar 1 e a variável vai ser 2. Ou seja, na segunda vez, não vai executar.
OU seja, ele não vai chamar recursivamente a sua trigger.
-
- Moderador
- Mensagens: 2016
- Registrado em: Qua, 12 Jan 2005 3:25 pm
- Localização: Araraquara - SP
Abraço,
Trevisolli
OCA Oracle PL/SQL Developer Certified Associate
OCP Oracle Forms Developer Certified Professional
Araraquara-SP
Trevisolli
OCA Oracle PL/SQL Developer Certified Associate
OCP Oracle Forms Developer Certified Professional
Araraquara-SP
Boa tarde brothers, quanto tempo...
Voltando aos poucos mais uma vez...
Aqui na empresa onde estou atualmente, utilizamos exatamente o conceito que o Dr_Gori comentou.
Quando vou dar insert, caso não queria que a trigger dispare, por exemplo, seto uma global em PL/SQL, através de uma package, mais ou menos assim:
begin
util.set('N');
-- Insere na tabela
insert into tabela (cod, nome) values (1,'Trevisolli');
end;
if util.get = 'S' then
-- realiza os procedimentos do trigger
insert into tabela_hist (data,cod,nome) values (sysdate,:new.cod, :new.nome);
end if;
Mas, a idéia do nosso grande amigo (Dr_Gori) é muito bacana e, é a que utilizamos hoje.
Grande abraço,
Trevisolli
-
- Informação
-
Quem está online
Usuários navegando neste fórum: Nenhum usuário registrado e 6 visitantes