在postgreSQL中使用currval计算年龄

时间:2016-12-06 19:41:44

标签: database postgresql stored-procedures triggers currval

我创建了一个包含人员表的数据库,其中包含人员的所有信息,例如他们的名字,姓氏,性别,出生日期和电子邮件。此表中的每一行都有一个序列peopleID。我正在尝试创建一个存储过程并触发器来自动计算刚刚输入的人的年龄。我正在尝试使用currval来获取最后插入的peopleID。

这是我的存储过程:

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

1 个答案:

答案 0 :(得分:-1)

您以不受支持的方式传递参数,请转发ead docs

  

请注意,必须声明该函数不带参数,即使它也是如此   期望接收CREATE TRIGGER中指定的一些参数 - 例如   参数通过TG_ARGV传递,如下所述。

  

TG_ARGV []

     

文字的数据类型数组;来自CREATE TRIGGER的论据   声明。索引从0开始计数。索引无效(小于0或   大于或等于tg_nargs)会产生空值。

(强调我的)