Как найти альтернативу для INNER JOIN в триггерах для этого случая? - PullRequest
0 голосов
/ 21 ноября 2018

Мне трудно понять, почему при выполнении триггера с функцией внутреннего соединения cmd вызывает ошибку: psql: createTrigger.sql: 46: ОШИБКА: currentStudentNumber не является известной переменной LINE 8:ВЫБЕРИТЕ 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 Ответ

0 голосов
/ 21 ноября 2018

Проблема с ключевым словом INTO:

SELECT  COUNT(Student_Subject.StudentID) INTO currentStudentNumber

Изменение INTO --> AS

Результирующий запрос будет:

SELECT COUNT(Student_Subject.StudentID) AS currentStudentNumber

Надеюсь, это сработает:)

...