Может ли кто-нибудь предложить хороший триггер, который я могу использовать в текстовом поле. Операция, которую я намереваюсь использовать в текстовом поле, — это когда пользователь изменяет значение в текстовом поле, я вызываю процедуру, которая обновляет это значение в таблице базы данных с фиксацией. Однако в тот момент, когда пользователь изменяет значение и нажимает ввод, он должен перейти к следующему элементу, перед которым он обновляет БД. Он отлично работает в триггере KEY-NEXT-ITEM. Однако одна проблема заключается в том, что, скажем, пользователь изменяет значение в fld , но не нажимает вкладку или ввод, а напрямую F10 для фиксации. Мой триггер в текстовом поле (например, KEY-NEXT-ITEM) не срабатывает. Я попробовал POST-TEXT-ITEM , но он не позволяет мне использовать встроенные функции COMMIT или NEXT_ITEM. Я хочу, чтобы триггер срабатывал в тот момент, когда пользователь выходит из элемента, а также должен переходить к следующему элементу в форме.
посттекстовый элемент не может принять фиксацию
Ответы (1)
Используйте триггер WHEN-VALIDATE-ITEM. Этот триггер в основном предназначен для проверки значения, введенного пользователем. Он срабатывает каждый раз, когда формы решают, что пользователь завершил значение поля - когда пользователь покидает поле, когда пользователь нажимает фиксацию и т. д.
К сожалению, вы не можете использовать COMMIT_FORM в этом триггере. Формы рекомендуют вносить прямые изменения в базу данных только в транзакционных триггерах. Чтобы реализовать изменение базы данных с фиксацией, запустите процедуру базы данных в автономной транзакции:
CREATE OR REPLACE PROCEDURE do_somethning (some_id NUMBER, some_value VARCHAR2) AS
PRAGMA AUTONOMOUS_TRANSACTION;
BEGIN
UPDATE some_table SET some_column = some_value
WHERE table_id = some_id;
COMMIT;
END do_somethning;
Ваш триггер WHEN-VALIDATE-ITEM может быть таким:
BEGIN
-- probably do some validations
...
-- call your procedure
do_something(:some_block.id, :some_block.your_field);
END;
person
Petr Pribyl
schedule
26.04.2017
Это отличная идея... большое спасибо ПРИМЕЧАНИЕ. Когда я использовал PRAGMA AUTONOMOUS_TRANSACTION; Это дало мне обнаруженный тупик ORA-00060, но когда я удалил его, он работал хорошо. Еще раз спасибо.
- person Mario R.Ayoub; 26.04.2017
вы, вероятно, изменяете ту же запись базы данных, что и выбранная в формах. Это желаемое поведение?
- person Petr Pribyl; 26.04.2017
есть ли в блоке больше полей базы данных? Как вы меняете эти предметы?
- person Petr Pribyl; 26.04.2017