Pessoal, to tentando criar uma gamibarra mesmo, mas é coisa temporária, até o problema ser realmente resolvido, rsrs.
Mas o caso é o seguinte: em nossa base de dados temos uma trigger que verifica se determinado campo possui alguma informação antes de deletar o mesmo. Caso tenha, ele dispara uma exception informando que o registro não pode ser excluído, pois o campo está preenchido.
O que quero fazer é antes de deletar a linha, atualizar esse campo para NULL.
É possível?
Obrigado.
Atualizar campo antes de deletar registro
-
- Moderador
- Mensagens: 641
- Registrado em: Seg, 03 Set 2007 3:26 pm
- Localização: Fortaleza - CE
att,
Daniel N.N.
Daniel N.N.
Hehehehhe, gostei da sinceridade.
Só acho que não existe muito isso de "temporário". Sempre é temporariamente longa a solução substituta.
Mas enfim...
Não, você não pode numa trigger de ON DELETE evitar o delete fazendo tratamento para só colocar NULL em um campo. Só se evita o DELETE com o exception, mas aí dá erro na transação, e pode causar erro na aplicação.
Só acho que não existe muito isso de "temporário". Sempre é temporariamente longa a solução substituta.
Mas enfim...
Não, você não pode numa trigger de ON DELETE evitar o delete fazendo tratamento para só colocar NULL em um campo. Só se evita o DELETE com o exception, mas aí dá erro na transação, e pode causar erro na aplicação.
Mas na verdade eu não quero EVITAR o delete.
Quero que ele realmente aconteça.
Porém, essa trigger que está evitando o delete está funcionando perfeitamente, é uma trigger do sistema mesmo.
Essa gambiarra em si é o seguinte: O campo que a trigger do sistema testa pode ter diversas informações. Esse campo não sendo nulo, a trigger gera uma exception impedindo a exclusão. Até ai perfeito, tem que ser assim mesmo.
O que quero fazer é que quando for deletar a linha e nesse campo contiver o valor 'X', esse campo seja atualizado para NULL, de forma que a trigger do sistema não impeça o delete.
Isso que estou tentando achar uma alternativa.
Vlw.
Quero que ele realmente aconteça.
Porém, essa trigger que está evitando o delete está funcionando perfeitamente, é uma trigger do sistema mesmo.
Essa gambiarra em si é o seguinte: O campo que a trigger do sistema testa pode ter diversas informações. Esse campo não sendo nulo, a trigger gera uma exception impedindo a exclusão. Até ai perfeito, tem que ser assim mesmo.
O que quero fazer é que quando for deletar a linha e nesse campo contiver o valor 'X', esse campo seja atualizado para NULL, de forma que a trigger do sistema não impeça o delete.
Isso que estou tentando achar uma alternativa.
Vlw.
Pois é, mas a trigger de sistema eu não quero mexer pois é do fornecedor do ERP, aí fica complicado para nós mexermos.
A minha idéia era fazer outra trigger.
Porém, estive lendo que no Oracle 10G não temos como definir a prioridade de execução de triggers do mesmo tipo. Como ambas seriam before delete, eu não teria como garantir que a minha fosse executada primeiro.
Acho que não vou consegui fazer o que estava pensando, rsrs.
Mas obrigado pelas respostas.
A minha idéia era fazer outra trigger.
Porém, estive lendo que no Oracle 10G não temos como definir a prioridade de execução de triggers do mesmo tipo. Como ambas seriam before delete, eu não teria como garantir que a minha fosse executada primeiro.
Acho que não vou consegui fazer o que estava pensando, rsrs.
Mas obrigado pelas respostas.
-
- Moderador
- Mensagens: 641
- Registrado em: Seg, 03 Set 2007 3:26 pm
- Localização: Fortaleza - CE
att,
Daniel N.N.
Daniel N.N.
O que eu não estou entendendo é:
Se você verica se campoX está preenchido para setar o mesmo campo como nulo, então você quer poder deletar TODOS registros dessa tabela.
Ou não é isso, é olhar um campo e colocar nulo outro????
Se você verica se campoX está preenchido para setar o mesmo campo como nulo, então você quer poder deletar TODOS registros dessa tabela.
Ou não é isso, é olhar um campo e colocar nulo outro????
é isso, eu verifico se o campo X está preenchido com determinado valor.Noctifero escreveu:O que eu não estou entendendo é:
Se você verica se campoX está preenchido para setar o mesmo campo como nulo, então você quer poder deletar TODOS registros dessa tabela.
Ou não é isso, é olhar um campo e colocar nulo outro????
Digamos que esse campo possa ter os valores (A,B,C ou D). Se o valor do campo for 'A' eu atualizo para null afim de permitir a exclusão. Caso não, deixa o campo como está que a trigger do sistema ira impedir a exclusão.
Relendo novamente o tópico vi que não havia mencionado o teste que precisava fazer, por isso ficava difícil de compreender a minha necessidade.
Desculpe pela confusão, mas agora consegui me expressar com clareza, rsrs.
Vlw.
Desculpe pela confusão, mas agora consegui me expressar com clareza, rsrs.
Vlw.
-
- Moderador
- Mensagens: 641
- Registrado em: Seg, 03 Set 2007 3:26 pm
- Localização: Fortaleza - CE
att,
Daniel N.N.
Daniel N.N.
Odeio ter que dizer isso, mas odeio mais ainda não ter solução, nem que seja "alternativa".
Crie outra trigger na mesma tabela, "ON DELETE", e se o campo for 'A', lance a exceção, TEMPORARIAMENTE, .
Crie outra trigger na mesma tabela, "ON DELETE", e se o campo for 'A', lance a exceção, TEMPORARIAMENTE, .
O problema é que já existe uma trigger BFORE DELETE nessa tabela.Noctifero escreveu:Odeio ter que dizer isso, mas odeio mais ainda não ter solução, nem que seja "alternativa".
Crie outra trigger na mesma tabela, "ON DELETE", e se o campo for 'A', lance a exceção, TEMPORARIAMENTE, .
Andei pesquisando e vi que o Oracle 10g não suporta ordenação de triggers, ou seja, não tenho como garantir que a trigger que eu criar seja executada antes da trigger que já existe.
-
- Moderador
- Mensagens: 641
- Registrado em: Seg, 03 Set 2007 3:26 pm
- Localização: Fortaleza - CE
att,
Daniel N.N.
Daniel N.N.
Tinha me confundido novamente sobre permitir e excluir. Falei achando que você queria impedir a exclusão. Mas você quer apenas permitir num caso específico que a trigger principal impede.
Realmente criar outra trigger before delete não funciona.
Suponho que apos inser ou updade você também não possa fazer essa verificação e setar este campo como NULL, visto ele ser necessário para o sistema.
É...Melhor desistir de gambiarra então.
Realmente criar outra trigger before delete não funciona.
Suponho que apos inser ou updade você também não possa fazer essa verificação e setar este campo como NULL, visto ele ser necessário para o sistema.
É...Melhor desistir de gambiarra então.
-
- Informação
-
Quem está online
Usuários navegando neste fórum: Bing [Bot], Majestic-12 [Bot] e 30 visitantes