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
rerodrig
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
raffccc
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
raffccc
Já tentei colocar o NOT Exists fora do parenteses tb e nao funciona… alguem sabe como resolver??
R
raffccc
up…
R
rerodrig
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
raffccc
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
rerodrig
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:
createtriggerproibecirurgiabeforeinsertoncirurgiaforeachrowdeclarev_contnumber;beginselectcount(*) 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.