В вопросе, который вы сказали, что ошибка относится к STATUS
, но это не соответствует вашему опубликованному коду Вы должны получить две ошибки, относящиеся к JOB_STATUS
.
Это потому, что она определяется каклокальная переменная, и вы пытаетесь ссылаться на нее как на переменную связывания.У него не должно быть префикса двоеточия;так что это компилирует:
create or replace trigger resume_trgr
before update on temp_jobs
declare
job_status temp_jobs.status%type;
begin
select STATUS into job_status from temp_jobs where id=6120;
if job_status='E'
then
update temp_jobs set STATUS='R' where id=6120;
end if;
end;
/
, как это делает, что полностью пропускает переменную:
create or replace trigger resume_trgr
before update on temp_jobs
begin
update temp_jobs set STATUS='R' where id=6120 and status = 'E';
end;
/
Является ли это полезной, действительной или разумной вещью, которую нужно делать внутри триггера, это другой вопрос,Это похоже на отдельное обновление, которое вы должны выполнить вручную перед «настоящим» обновлением, возможно, в процедуре - если вы действительно хотите всегда обновлять строку для этого конкретного идентификатора, независимо от того, что еще вы действительно делаете в своем «реальном» (Триггер) обновление.
Если то, что вы действительно пытаетесь сделать, это убедиться, что статус меняется на R
, даже если вызывающий не делает этого явно, то вам, вероятно, нужен триггер уровня строки, который устанавливаетзначение псевдороу, а не триггер уровня оператора с жестко заданным идентификатором.