我从另一个帖子中得到了这个样本,它非常适合我需要知道的内容。
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的默认值设置为创建表的序列,但是我无法修改它...我只是可以更改触发器功能。
答案 0 :(得分:1)
类似的东西:
if new.id is NULL then
New.id:=nextval('AlimentosSequencia');
end if;