Функция для триггера (представление INSTEAD OF DELETE ON) не может выбирать значения из запроса [POSTGRESQL] - PullRequest
1 голос
/ 10 марта 2019

Функция и относительный триггер, который я сделал, выглядят следующим образом:

CREATE OR REPLACE FUNCTION unregister() RETURNS trigger AS $$
BEGIN
  RAISE NOTICE 'Student: %, course: %.', NEW.student, NEW.course;
    IF (EXISTS (SELECT student FROM view_registered WHERE student = NEW.student AND course = NEW.course)) THEN
      DELETE FROM table_registered WHERE student = NEW.student AND course = NEW.course;
      RAISE NOTICE '% successfully unregistered from this course (%)!', NEW.student, NEW.course;
    ELSE
      RAISE EXCEPTION '% is not registered to this course (%)!', NEW.student, NEW.course;
    END IF;
RETURN NEW;
END;
$$ LANGUAGE plpgsql;

CREATE TRIGGER unregister INSTEAD OF DELETE ON view_registered
    FOR EACH ROW EXECUTE PROCEDURE unregister();

С самого начала я видел в начальном RAISE NOTICE, что функция не выбирает значения из запросов, таких как:

DELETE FROM view_registered WHERE student = 4002222222 AND course = 'ITC222';

На самом деле его вывод начинается с NOTICE: Student: <NULL>, course: <NULL>.

Я не могу понять, что не так с этим кодом и почему функция выбирает значения из запросов.

1 Ответ

1 голос
/ 10 марта 2019

Я думаю, что вы хотите OLD:

RAISE NOTICE 'Student: %, course: %.', OLD.student, OLD.course;

В триггере delete заполнено OLD, а NEW - нет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...