Как найти альтернативу INNER JOIN в триггерах для этого случая?
Мне трудно понять, почему при выполнении триггера с функцией внутреннего соединения cmd вызывает ошибку: psql: createTrigger.sql: 46: ОШИБКА: "currentStudentNumber" не является известной переменной LINE 8: SELECT COUNT(Student_subject.StudentID) INTO currentStudentNumber
--rule, that lecturer can not have more than 7 students
CREATE FUNCTION lecturersStudentNumber() RETURNS "trigger" AS $$
DECLARE
maxStudenNumber CONSTANT SMALLINT :=7;
currentStudentNumber SMALLINT;
BEGIN
SELECT COUNT(Student_Subject.StudentID) INTO currentStudentNumber
FROM rora3887.Subject_Lecturer
INNER JOIN rora3887.Lecturer ON Subject_Lecturer.LecturerID=Lecturer.LecturerID
INNER JOIN rora3887.Subject ON Subject_Lecturer.SubjectID=Subject.SubjectID
INNER JOIN rora3887.Student_Subject ON Subject.SubjectID=Student_Subject.SubjectID
GROUP BY Lecturer.LecturerID;
IF MAX(currentStudentNumber) + 1 > maxStudentNumber
THEN RAISE EXCEPTION 'Lecturer can not have more than 7 students';
END IF;
RETURN NEW;
END;
$$ LANGUAGE plpgsql;
CREATE TRIGGER lecturersMaxStudentNumber
BEFORE INSERT OR UPDATE ON rora3887.Subject_Lecturer
FOR EACH ROW EXECUTE PROCEDURE lecturersStudentNumber();
У меня есть файл createTrigger.sql с таким кодом. Моя схема связи с базой данных
1 ответ
Проблема с ключевым словом INTO
:
SELECT COUNT(Student_Subject.StudentID) INTO currentStudentNumber
+ Изменить INTO --> AS
Результирующий запрос будет:
SELECT COUNT(Student_Subject.StudentID) AS currentStudentNumber
Надеюсь, что это работает:)