Расчет возраста с помощью currval в postgreSQL

Я создал базу данных с таблицей "Люди", которая содержит всю информацию для людей, такую ​​как их имя, фамилия, пол, дата рождения и адрес электронной почты. Каждая строка в этой таблице имеет серийный 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

1 ответ

Вы передаете аргументы не поддерживаемым способом, пожалуйста, прочитайте документы

Обратите внимание, что функция должна быть объявлена ​​без аргументов, даже если она ожидает получить некоторые аргументы, указанные в CREATE TRIGGER - такие аргументы передаются через TG_ARGV, как описано ниже.

а также

TG_ARGV[]

Тип данных массив текста; аргументы из оператора CREATE TRIGGER. Индекс отсчитывает от 0. Неправильные индексы (меньше 0 или больше или равны tg_nargs) приводят к нулевому значению.

(акцент мой)

Другие вопросы по тегам