Я только начал писать функцию триггера PL/pgSQL. У меня есть пара таблиц «Студент и результат». Студент, имеющий следующие столбцы. ID, название, предмет, знак (ID является первичным ключом) и таблица результатов имеет две колонки, как ID, СтатусНе удалось получить доступ к значению первичного ключа в функции запуска PostgreSQL
Всякий раз, когда одна запись добавлена в таблицу студента, я хочу чтобы обновить таблицу результатов, проверив метку в таблице «Студент». Если введенный знак больше 50, то в таблицу результатов с идентификатором и статусом = 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 внутри функции Trigger как следующий
INSERT INTO "Результат" SELECT NEW.ID, 'провал'; (или) INSERT INTO «Результат» SELECT NEW.ID, 'pass';
Он бросает ошибку как
> ***Record "new" has no field "id" Context : PL/pgSQL function
> "UpdateResult" line 3 at SQL statement***
Значит может принимать значения, не являющихся значениями первичного ключа от новой переменной не первичный ключ. Может ли кто-нибудь сказать мне, есть ли ограничение в PL/pgSQL или я делаю что-то неправильно!
Проверьте капитализацию поля «ID» - если это в столицах, то вы должны использовать его таким же образом (цитируя его): INSERT INTO «Результат "SELECT NEW." ID ", NEW.name; –
Привет, Милен. Да, это заглавная буква, после добавления цитат, в которых она работает. Не могли бы вы рассказать мне, зачем нам это делать? – Murugesh
[Идентификаторы и ключевые слова] (http://www.postgresql.org/docs/ current/static/sql-syntax-lexical.html # SQL-SYNTAX-IDENTIFIERS), найдите «цитируемый идентификатор». –