10

Postgresトリガーのヘルプが必要です。

2列のテーブルがあります。

sold boolean;
id_shop int;

アイテムが販売されているかどうか、またはどのショップにあるかを保存します。

トリガーが必要です。「販売済み」をtrueに変更すると、もに変更id_shopNULLれます(販売されている場合はショップに入れることはできません...)

さまざまな方法を試しましたが、動作しないか、更新コマンドでエラーが発生します...

create or replace function pardota_masina_veikals() RETURNS trigger AS $pardota_masina$
begin
  IF NEW.sold=true THEN
    update masinas
      SET id_shop=null WHERE id=NEW.id;
  END IF;
  RETURN NEW;
END;
$pardota_masina$ LANGUAGE plpgsql;


CREATE TRIGGER pardota_masina_nevar_but_veikala 
    AFTER INSERT OR UPDATE ON masinas FOR EACH ROW EXECUTE PROCEDURE pardota_masina_veikals();
4

1 に答える 1

14

まず、更新(または挿入)される行の値を変更する場合は、 beforeトリガーが必要です。

次に、テーブルを「更新」する必要はありません。新しい値を新しい行に割り当てるだけです。

create or replace function pardota_masina_veikals() 
RETURNS trigger 
AS 
$pardota_masina$
begin
  IF NEW.sold=true THEN
    NEW.id_shop = NULL;
 END IF;
RETURN NEW;
END;
$pardota_masina$ 
LANGUAGE plpgsql;

CREATE TRIGGER pardota_masina_nevar_but_veikala 
   BEFORE INSERT OR UPDATE ON masinas 
   FOR EACH ROW EXECUTE PROCEDURE pardota_masina_veikals();
于 2012-05-09T12:50:12.500 に答える