0

別のスレッドからこのサンプルを入手しましたが、私が知る必要があるものに完全に適合しています。

CREATE SEQUENCE AlimentosSequencia;

CREATE TABLE alimento (
  id integer NOT NULL PRIMARY KEY
 ,name VARCHAR(255));

 CREATE OR REPLACE FUNCTION AlimentoFuncion()
 RETURNS "trigger" AS
 $BODY$
 BEGIN
   New.id:=nextval('AlimentosSequencia');
   Return NEW;
 END;
 $BODY$
 LANGUAGE 'plpgsql' VOLATILE;

 CREATE TRIGGER AlimentosTrigger
 BEFORE INSERT
 ON alimento
 FOR EACH ROW
 EXECUTE PROCEDURE AlimentoFuncion();

 INSERT INTO alimento (name) VALUES ('lemon');

これはうまくいっています!しかし、関数 AlimentoFunction を補完する必要があります。

IN THE FUNCTION で INSERT ステートメントが ID を配置しているかどうかを確認する方法はありますか?

例:

INSERT INTO alimento (name) VALUES ('lemon');

わかりました、これは機能します...そして私がそれを行うと:

INSERT INTO alimento (id, name) VALUES (299, 'lemon');

私の関数は、シーケンスを使用する必要があるかどうかを確認する必要があります。

ID のデフォルト値をテーブル作成時のシーケンスに設定できることはわかっていますが、それを変更することはできません。トリガー関数を変更することしかできません。

4

1 に答える 1

1

何かのようなもの:

if new.id is NULL then 
   New.id:=nextval('AlimentosSequencia');
end if;
于 2013-02-01T11:46:55.307 に答える