Функция и относительный триггер, который я сделал, выглядят следующим образом:
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>.
Я не могу понять, что не так с этим кодом и почему функция выбирает значения из запросов.