Я делаю систему бронирования рейсов и пытаюсь проверить наличие самолета, прежде чем назначать его на рейс, я использую Apex и делаю это с помощью триггера. Триггер работает в случае вставки, однако в случае обновления я получил ошибку.Ошибка во время запуска триггера
Ошибка:
•ORA-04091: table FLIGHT is mutating, trigger/function may not see it ORA-06512: at
"VALIDATEPLANE", line 2 ORA-04088: error during execution of trigger 'VALIDATEPLANE'
Кодекс:
create or replace trigger "VALIDATEPLANE"
before
insert or update on "FLIGHT"
for each row
begin
for index1 in(select * from FLIGHT)
loop
if :new.PLANE_NO = index1.PLANE_NO
then
if :new.DEPARTUAL_DATE <index1.DEPARTUAL_DATE
or :new.DEPARTUAL_DATE > index1.DEPARTUAL_DATE
then
if :new.ARRIVE_DATE<=index1.ARRIVE_DATE
then
:new.ARRIVE_DATE := (index1.ARRIVE_DATE+1) + (:new.ARRIVE_DATE -:new.DEPARTUAL_DATE);
:new.DEPARTUAL_DATE := index1.ARRIVE_DATE +1;
end if;
ELSIF :new.DEPARTUAL_DATE =index1.DEPARTUAL_DATE
then
:new.ARRIVE_DATE := (index1.ARRIVE_DATE+1) + (:new.ARRIVE_DATE -:new.DEPARTUAL_DATE);
:new.DEPARTUAL_DATE := index1.ARRIVE_DATE +1;
end if;
end if;
end loop;
end;
Это, вероятно, вызовет ту же ошибку здесь :) –
@VincentMalgrat Спасибо за это. Мои плохие глаза, я изначально думал, что это проблема грязного чтения и ответа из моих архивов. Иногда в пятницу вечером я становлюсь частично слепым :) Теперь я полностью изменил свой ответ – SriniV