2013-02-01 27 views
0

我從另一個線程獲得了此示例,它完全符合我需要知道的內容。帶觸發器和序列的自動增量字段 - 檢查ID是否在語句中[Postgres]

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 FUNCTION嗎?

例子:

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

確定這,作品......如果我這樣做:

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

我的函數必須檢查序列必須使用。

我知道我可以將ID的默認值設置爲表創建的序列,但我無法修改該..我只是可以更改觸發器功能。

回答

1

喜歡的東西:

if new.id is NULL then 
    New.id:=nextval('AlimentosSequencia'); 
end if; 
+0

我已經試過了,但我得到的消息錯誤,指出「ID」不存在於「新」。 – ComosGuy

+0

@ComosGuy:適合我:http://sqlfiddle.com/#!12/bffd9/1你使用哪種Postgres版本? –

相關問題