2016-12-06 176 views
0

我創建了一個People表,其中包含People表的所有信息,如姓名,姓氏,性別,出生日期和電子郵件。此表中的每一行都有一個序列peopleID。我正在嘗試創建存儲過程並觸發自動計算剛剛輸入的人的年齡。我正在嘗試使用currval來獲取最後插入的peopleID。在postgreSQL中使用currval計算年齡

這是我的存儲過程:

CREATE OR REPLACE FUNCTION PersonAge (peopleID INT) 
RETURNS INTERVAL AS 
$$ 
DECLARE 
birthday date := (SELECT People.dateOfBirth 
     FROM People 
     ); 
BEGIN 
RETURN age(birthday); 
END; 
$$ 
LANGUAGE plpgsql 

這是我的觸發器:

CREATE TRIGGER CalculateAge 
AFTER INSERT OR UPDATE ON People 
FOR EACH ROW 
EXECUTE PROCEDURE PersonAge(SELECT currval(‘people_id_seq’)); 

這是我得到的錯誤,當我嘗試用一​​個INSERT語句來實現它:

ERROR: syntax error at or near "currval" 
LINE 5: EXECUTE PROCEDURE PersonAge(SELECT currval('people_id_seq')... 
             ^
********** Error ********** 

ERROR: syntax error at or near "currval" 
SQL state: 42601 
Character: 116 
+0

與參數觸發功能?.. –

+0

我覺得我有點困惑,我這裏需要特定元素。我對觸發器相當陌生。 – user5959738

+0

肯定的事情。我拿起文檔供你閱讀 - 看看我的回答 –

回答

-1

您以不支持的方式傳遞參數,請r ead docs

注意函數必須不帶參數的聲明,即使它 希望接收指定在CREATE TRIGGER一些參數 - 比如 參數是通過TG_ARGV過去了,如下所述。

TG_ARGV []

數據類型陣列文本的;來自CREATE TRIGGER 聲明的參數。索引從0開始計數。無效索引(小於0或 大於或等於tg_nargs)會導致空值。

(重點煤礦)

+0

當你發出CREATE TRIGGER CalculateAge時,這會在TG_ARGV中提供'currval('people_id_seq')'的值,而不是當它在'INSERT'或'UPDATE'上執行時。我不知道作者想要做什麼。 –