ОК, несколько вещей, о которых можно поговорить здесь
1) Я предполагаю, что 'table1' - это НЕ таблица, на которой основан блок.Если блок был основан на таблице 1, просто, когда пользователь редактирует записи на экране, тогда, когда вы выполняете команду COMMIT_FORM (или пользователи нажимают кнопку Сохранить), соответствующие обновления будут сделаны для вас автоматически.(Это основное использование блока на основе таблицы базы данных).
2) Поэтому я предполагаю, что table1 - это нечто ДРУГОЕ, чем таблица на основе блоков.Следующее, что вам, вероятно, понадобится предложение WHERE в вашем операторе обновления.Я предполагаю, что вы обновляете конкретное в таблице1 на основе определенного значения из блока?Так что это будет что-то вроде:
update table1
set ord_no = :blk.new_val
where keycol = :blk.some_key_val
3) Вы не можете выполнять определенные операции стиля навигации, когда в середине фиксации, следовательно, ошибка.Обходной путь для этого состоит в том, чтобы отложить операцию до завершения навигации через таймер.Таким образом, ваш код выглядит примерно так:
Declare
l_timer timer;
Begin
l_timer := find_timer('DEFERRED_CHANGES');
if not id_null(l_timer) then
Delete_Timer(l_timer);
end if;
l_timer := Create_Timer('DEFERRED_CHANGES', 100, no_Repeat);
End;
, который создает таймер, который срабатывает один раз через 100 мс после завершения вашего триггера (выберите имя и время соответственно), а затем у вас будет свой исходный код на время-время-триггер с истекшим сроком действия.
Но, пожалуйста - сначала проверьте мою точку зрения (1).