Обработка исключений с помощью Oracle Forms Builder

Я делаю свою первую форму Oracle в Oracle Forms Builder с помощью веб-материалов, то есть учебных пособий и т. д. Я написал следующий код в триггере WHEN-BUTTON-PRESSED:

INSERT INTO PATIENT VALUES 
(:CNIC_NO, :P_NAME, :CITY, :ADDRESS, :GENDER, :BLOOD_GROUP, :DISEASE, :WARD_NO);
COMMIT;

Проблема здесь в том, что необработанное исключение вызывается триггером со следующими номерами ошибок:

  • ORA-12899 (Причина в том, что значение Null вставлено в ненулевой столбец)
  • ORA-1400 (Причина в том, что длина данных превышает допустимую длину)

Мне нужно всплывающее информационное окно сообщения для них и окно по умолчанию для других.


person Itban Saeed    schedule 23.09.2016    source источник


Ответы (3)


Прежде всего, я бы избежал этих ошибок с помощью встроенной проверки форм Oracle. Установите для свойства Required значение True на панели свойств для всех элементов, которые основаны на ненулевых столбцах базы данных. Формы Oracle затем заставляют пользователя вводить значение.

Затем установите свойства Datatype и Maximum length, чтобы установить основные проверки данных.

Этого должно быть достаточно в вашем случае. Если вы все еще хотите поймать исключение, используйте такой код:

begin
    INSERT ...
exception
    when others then
        message(DBMSERRTEXT);
end;

В любом случае - не рекомендуется вставлять данные, используя триггеры при нажатии кнопки. Это не безопасно для транзакций. Используйте стандартный блок форм. Формы Oracle выполняют всю проверку данных и манипуляции за вас.

person Petr Pribyl    schedule 26.09.2016
comment
+1 Спасибо за подробный ответ. Хотя я нашел метод с использованием кода, но использование проверки форм — еще один хороший совет :) - person Itban Saeed; 26.09.2016
comment
Будьте осторожны, используя when others в триггерах форм. Он будет ловить все исключения, найти ошибки в коде может быть сложно. Вы будете обрабатывать больше исключений, чем вам нужно. - person Petr Pribyl; 26.09.2016
comment
Прошло некоторое время с тех пор, как я использовал формы, но одну вещь, которую я четко помню, это то, что для ошибок, информации и общего сообщения доступны разные всплывающие окна, и было хорошей идеей написать стандартный набор процедур pop_error /pop_info и т. д. один раз и повторно использовать их по мере необходимости. Например, вариант «ошибка» остановится при сбое, а вариант «информация» — нет. - person William Robertson; 19.10.2016

Вы должны либо гарантировать, что в указанный столбец будет вставлено подходящее значение, которое не принимает нулевое значение, либо вы должны использовать функцию NVL внутри оператора вставки. Что ж, иметь технику тоже неплохо. обрабатывать ошибки и информационные сообщения Oracle Forms

Вы также должны создать размер столбцов таблицы, достаточно большой для хранения вставленных данных, поскольку адрес, например, должен быть больше 100 varchar2.

person Amatu Allah    schedule 25.09.2016
comment
Я не хочу тщательно исправлять txtspk каждый раз, когда вы повторно добавляете его - если вам нужно внести поправки, убедитесь, что вы используете настоящие слова (например, нет u означает вас) и, пожалуйста, не подписывайте свои сообщения. Ваш блок сиг - достаточно хорошая подпись. Функции кода также лучше FORMATTED(), чем BOLDED() — используйте обратные кавычки для встроенного форматирования. - person halfer; 07.10.2016
comment
Почему нельзя писать так, как я люблю выражаться, сокращенными словами и т. д. кто ты? Я не понимаю, почему вы так точны в ответе? где я могу найти эти детали, чтобы следовать? - person Amatu Allah; 08.10.2016
comment
По разным причинам. Отчасти, чтобы избежать отрицательных голосов, потому что некоторые люди находят txtspk раздражающим. Отчасти потому, что орфография и грамматика важны. Отчасти потому, что вам нужно быть в порядке с другими людьми, редактирующими ваши сообщения. Отчасти потому что это мнение сообщества. Отчасти потому, что я здесь уже несколько лет и впитал в себя несколько тем о том, как нам нравится писать посты. - person halfer; 08.10.2016

Вы можете использовать панель инструментов меню Oracle Forms по умолчанию , которая будет обрабатывать операции CRUD формы для ты. Вместо того, чтобы писать вставку, обновление и т.д.

Но вы должны указать его использование самостоятельно для каждого модуля формы.

person Amatu Allah    schedule 26.09.2016