Я только начал писать функцию триггера PL / pgSQL.У меня есть пара столов под названием «Студент и результат».Студент, имеющий следующие столбцы. ID, имя, тема, отметка (ID - это первичный ключ) , а таблица результатов содержит два столбца, например ID, статус
Всякий раз, когда в таблицу ученика добавляется одна запись, я хочу обновить таблицу результатов, проверив отметку в таблице учеников. Если введенная отметка больше 50, тогда одна запись должна быть вставлена в таблицу результатов.с ID и Status = Pass, и если оно меньше 50, то состояние будет сбойным.У меня есть следующая функция триггера, чтобы добиться этого
CREATE OR REPLACE FUNCTION "UpdateResult"() RETURNS trigger AS $BODY$
BEGIN
IF NEW.mark < 50 THEN
INSERT INTO "Result" SELECT 92,'fail';
RETURN NEW;
ELSE
INSERT INTO "Result" SELECT 92,'pass';
RETURN NEW;
END IF;
END;
$BODY$
LANGUAGE 'plpgsql' VOLATILE STRICT SECURITY DEFINER
COST 100;
ALTER FUNCTION "UpdateResult"() OWNER TO postgres;
CREATE TRIGGER "Result"
AFTER INSERT
ON "Student"
FOR EACH ROW
EXECUTE PROCEDURE "UpdateResult"();
По этой функции триггер сработал, как и ожидалось, так как я жестко закодировал значение первичного ключа.Но когда я изменяю SQL внутри функции триггера, как показано ниже:
INSERT INTO "Result" SELECT NEW.ID, 'fail'; (или) INSERT INTO "Result" SELECT NEW.ID, 'pass';
Выдает ошибку типа
> ***Record "new" has no field "id" Context : PL/pgSQL function
> "UpdateResult" line 3 at SQL statement***
Значитон может принимать значения значений не первичного ключа из переменной NEW, а не значение первичного ключа.Может ли кто-нибудь сказать мне, пожалуйста, есть ли ограничение в PL / pgSQL или я делаю что-то не так?