Trigger Before Delete

Dúvidas, dicas e truques de PL/SQL. Aqui também vão assuntos relacionados a pacotes, triggers, funções, Java-Stored Procedures, etc
  

Mensagemem Ter, 03 Jan 2006 2:02 pm

Pessoal boa tarde.

Gostaria de tirar uma dúvida.

Teria como eu criar uma trigger de before delete, por exemplo e, colocar uma cláusula e, se ela for verdadeira, não executar o delete?
Por exemplo:

Trigger de before delete, mas, se a=1, ela não dispara?
isso teria q vir da aplicação?

Grato,

Trevisolli
:-o
Trevisolli
Localização: Araraquara - SP

Mensagemem Seg, 09 Jan 2006 7:56 pm

você pode criar esse tipo de regra na trigger sim (má idéia). Em minha opinião o lugar certo para isso é na aplicação, na lógica.

Para exemplo da trigger você poderia:


Código: Selecionar todos
ops$marcio@LNX10GR2> create table t ( x int );

Table created.

ops$marcio@LNX10GR2>
ops$marcio@LNX10GR2> create or replace trigger t_bi_fer
  2  before insert on t for each row
  3  begin
  4          if ( :new.x = 1 ) then
  5             raise_application_error(-20001, 'Aqui não!');
  6          end if;
  7  end;
  8  /

Trigger created.

ops$marcio@LNX10GR2> show error
No errors.
ops$marcio@LNX10GR2>
ops$marcio@LNX10GR2> insert into t values ( 0 );

1 row created.

ops$marcio@LNX10GR2> insert into t values ( 1 );
insert into t values ( 1 )
            *
ERROR at line 1:
ORA-20001: Aqui não!
ORA-06512: at "OPS$MARCIO.T_BI_FER", line 3
ORA-04088: error during execution of trigger 'OPS$MARCIO.T_BI_FER'
mportes
Localização: São Paulo


Mensagemem Ter, 10 Jan 2006 2:08 pm

Uma outra forma, que talvez não se aplica ao caso do trevisolli, é criar uma VIEW e aplicar uma trigger INSTEAD OF nela.

Daí, dentro dessa trigger, você testa a condição e aplica ou não o DELETE na tabela original...

(é claro, nesse caso não é garantido o fato do usuário aplicar um delete diretamente na tabela)... ou seja, não serve pra muita coisa...
dr_gori
Localização: Portland, OR USA

Thomas F. G

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

Mensagemem Seg, 19 Jun 2006 2:07 pm

como eu faria com comparação de campos entre duas tabelas??
goiaba3d
Localização: sp

Mensagemem Seg, 19 Jun 2006 2:28 pm

está falando de comparar um campo com outro (de outra tabela) dentro de uma trigger before delete ?

Basta você fazer o select desejado dentro da trigger.
É isso? Se não for, explique melhor o que você quer fazer.
dr_gori
Localização: Portland, OR USA

Thomas F. G

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


  • Veja também
    Respostas
    ExibiÇões
    Última mensagem


Voltar para PL/SQL

Quem está online

Usuários navegando neste fórum: Google [Bot] e 4 visitantes