我想要的:当每个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
上进行读/写。
答案 0 :(得分:0)
您可以尝试以下方法吗?
UPDATE Pile
SET defaussee = 0
WHERE (id_pilecarte, 1) IN (
SELECT id_pilecarte, MIN(defaussee)
FROM Pile
GROUP BY id_pilecarte
HAVING MIN(defaussee) = 1
);