0

我创建了一个带有 People 表的数据库,其中包含人们的所有信息,例如他们的名字、姓氏、性别、出生日期和电子邮件。此表中的每一行都有一个连续的 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’));

这是我尝试使用插入语句实现它时遇到的错误:

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
4

1 回答 1

0

您以不受支持的方式传递参数,请阅读文档

请注意,即使函数希望接收在 CREATE TRIGGER 中指定的某些参数,也必须在不带参数的情况下声明该函数——这些参数通过 TG_ARGV 传递,如下所述。

TG_ARGV[]

文本数据类型数组;CREATE TRIGGER 语句中的参数。索引从 0 开始计数。无效索引(小于 0 或大于或等于 tg_nargs)会导致 null 值。

(强调我的)

于 2016-12-06T20:12:26.343 回答