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。

如果我的插入语句放置了一个 ID,有什么方法可以检查 IN THE FUNCTION?

例子:

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 回答