在PL / SQL中更新表和触发器

时间:2016-04-05 09:47:42

标签: sql oracle plsql triggers

我想要的:当每个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上进行读/写。

1 个答案:

答案 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
);