Benim istediğim: Her defaussee
1'e eşit olduğu zaman 0'a için bunları açmak istiyor İşteGüncelleme masa ve tetik
create table Pile(
id_carte Int NOT NULL,
id_pilecarte Int NOT NULL,
defaussee Int NOT NULL,
id_personne Int
);
Ben kullanmak istiyorum Bunu yapmak için benim masam Pile
'da tetikleyin. Ancak, masamı bu tetikleyiciye değiştiremediğimi biliyorum.
create or replace trigger trg_pile_porte_vide
after update
on Pile
for each row
declare
v_count Int;
begin
-- pile tresor
select count(*) into v_count from (select id_carte from Pile where id_pilecarte = 0 and defaussee = 0 and id_personne is null);
-- toutes les cartes sont defause
if(v_count = 0) then
update Pile set defaussee = 0 where id_pilecarte = 0;
end if;
-- pile tresor
select count(*) into v_count from (select id_carte from Pile where id_pilecarte = 1 and defaussee = 0 and id_personne is null);
-- toutes les cartes sont defause
if(v_count = 0) then
update Pile set defaussee = 0 where id_pilecarte = 1;
end if;
end;
biri bana yardım edebilir: Burada
ben ne var?
Bu hata sadece UPDATE
numaralı telefondan değil. Oracle ilk SELECT
'dan bağırdı. Pile
'daki bir tetikleme sırasında Pile
okuduğum/yazdığım onu istemiyor.
Tetikleyicinizi "AFTER" yerine "ÖNCE GÜNCELLEŞTİRME" tetikleyicisine değiştirirseniz ne olur? Oracle, temelde sonsuz bir döngü oluşturduğunuzdan, onu güncelledikten sonra verileri işlemekten kurtarmanızı önler. –
'if (: new.defaussee = 1) 'i kullanmayı deneyin: new.defaussee: = 0; eğer ise; –