:すべてのdefaussee
が1に等しいとき、私はここで0 にそれらを有効にしたい私のテーブルである更新テーブルとトリガー
create table Pile(
id_carte Int NOT NULL,
id_pilecarte Int NOT NULL,
defaussee Int NOT NULL,
id_personne Int
);
私が使用することを行うにはPile
のトリガー。 しかし私はテーブルをそのトリガに変更できないことを知っています。ここで
は私が持っているものです。
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;
は、誰かが私を助けることができませんか?
エラーはUPDATE
にあるだけではありません。 Oracleは最初のSELECT
から怒鳴ります。彼は、Pile
のトリガ中に私が読んだ/読んでいるのをPile
にしたくない。
トリガーを「AFTER」ではなく「BEFORE UPDATE」トリガーに変更するとどうなりますか? Oracleは、基本的に無限ループを作成しているため、更新後にデータを操作できないようにします。 –
'if(:new.defaussee = 1)を使ってみてください:new.defaussee:= 0;終わりです。 –