[URGENTE]Dúvida com trigger

12 respostas
R

Galera eu to com uma duvida… pq esse trigger é inválido? Eu tenho qse certeza q o erro está no set(linha 6) não sei se é assim q tem q ser feito…

create TRIGGER proibeCirurgia BEFORE INSERT ON cirurgia FOR EACH ROW BEGIN if (:new.id=1) then set :new.id=null; end if; END;

Outra coisa… dentro desse if pode ser feito um NOT EXISTS seguido de uma consulta?

12 Respostas

O

create TRIGGER proibeCirurgia BEFORE INSERT ON cirurgia FOR EACH ROW BEGIN if (new.id=1) then set new.id=null; end if; END;

Porque do “:” antes do NEW ?

R

pq eh oracle… eu ja tentei sem os “:” também e não funcionou

bruno.leite

Crio que a atribuição está errado, aqui compilou dessa forma

CREATE OR REPLACE TRIGGER proibeCirurgia
    BEFORE INSERT ON cirurgia  
    FOR EACH ROW
    
BEGIN
      if (:new.id=1) then
        :new.id :=null;
      end if;
   END;
R

tipo… da minha forma também compila… o trigger eh feito… o problema é na hora q ele é ativado…
vc testou aih?

bruno.leite

Cara não realizei esse teste, no entendo do modo antigo, o meu criava a trigger mas ele não compilava, oque exatamente vc deseja fazer com a trigger? infelizmente poderei testar só segunda agora.

R

raffccc, aquele código que você postou cria a trigger com erro, o modo que o Bruno postou está correto…com relação ao not exists, explica melhor o que você precisa…falow

R

Valeu… a forma de setar null era aquela msm!

na condição eu preciso de algo assim!

create TRIGGER proibeCirurgia BEFORE INSERT ON cirurgia FOR EACH ROW BEGIN if (NOT EXISTS (SELECT p.RG from paciente p, sala s, servico s WHERE s.tipoSala='Operação' AND p.numerosala=s.numero AND p.rg=s.rg AND :new.id = s.id)) then :new.id := null; end if; END;

Oq eu quero dizer nessa condição é que se não existir o paciente na sala de cirurgia não se deve permitir a inserção na tabela

R

Já tentei colocar o NOT Exists fora do parenteses tb e nao funciona… alguem sabe como resolver??

R

up…

R

Faz assim:

select count(*)
into v_cont
from...
where...

if v_cont = 0 then
    ...
end if;

Muda esse select, você colocou o mesmo alias para duas tabelas.

R

não entendi esse teu select…

oq ele tem que ver com minha condição?

De acordo com meu MER o Select tem q ser uma junção de duas tabelas msm

R

No PLSQL não tem como usar o not exists fora de um select, da maneira que você está fazendo. Esse jeito que coloquei é uma das maneiras possíveis.

Usando o seu código, ficaria assim:

create trigger proibecirurgia
    before insert on cirurgia
    for each row
declare
    v_cont number;
begin

    select count(*)
      into v_cont
      from paciente p,
           sala     sa,
           servico  se
     where sa.tiposala = 'Operação'
       and p.numerosala = sa.numero
       and p.rg = se.rg
       and :new.id = se.id;

    if v_cont = 0 then
        :new.id := null;
    end if;

end;

O problema que citei foi que você havia dado o mesmo apelido para as tabelas sala e servico, no meu exemplo eu já alterei, veja como ficou.

Criado 9 de janeiro de 2009
Ultima resposta 26 de jan. de 2009
Respostas 12
Participantes 4