Расчет возраста с помощью 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) приводят к нулевому значению.
(акцент мой)