Вам не нужно включать таблицу JOB в запрос.У вас есть информация, которая вам требуется в: NEW namespace.Если не включить таблицу JOB в запрос, это остановит ошибку ORA-04091
.
Также у вас есть два набора операторов управления курсором.Выбери один.Я предпочитаю неявный синтаксис курсора, потому что он менее типизирован (и немного более эффективен).
CREATE OR REPLACE TRIGGER Display_Update_Message
BEFORE UPDATE ON JOBS
FOR EACH ROW WHEN ((old.IsFilled != new.IsFilled) AND (new.isFilled = 'yes'))
BEGIN
DBMS_OUTPUT.PUT_LINE('Seekers affected by closing job '
|| :new.JobID || ': ' || :new.JobName);
FOR UT IN (SELECT JS.LastName
, JS.FirstName
, JS.Email Email
FROM JOBAPPLICATIONS JA
FULL OUTER JOIN JOBSEEKERS JS ON JA.JSID = JS.JSID
WHERE JA.JobID = :new.JobID )
LOOP
DBMS_OUTPUT.PUT_LINE('--' || UT.LastName || ', ' || UT.FirstName || ' ' || UT.Email);
END LOOP;
:new.StopDate := sysdate;
END;
/
Между прочим, я не уверен, почему в вашем курсоре есть FULL OUTER JOIN.Я бы подумал, что INNER JOIN - это правильное решение.Конечно, вы хотите только соискателей, которые подали заявку на работу, которую вы закрываете?Однако я оставил это, потому что я не знаю ваших бизнес-правил, и в любом случае я уже достаточно изменил ваш код :)