2016-09-23 14 views
1

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

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

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

  • ОР-12899 (Причина это Нулевое значение вставляется в не-Null колонки)
  • ORA-1400 (Причина в том, что длина данных слишком велик, чем допустимая длина)

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

ответ

2

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

Следующий набор Datatype и Maximum length свойства для установки основных данных.

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

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

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

+0

+1 Спасибо за подробный ответ. Хотя я нашел метод с использованием кода, но с помощью проверки формы - еще один приятный отзыв :) –

+1

Будьте осторожны с использованием 'when others' в триггерах форм. Он поймает все исключения, может быть сложно найти ошибки в коде. Вы будете обрабатывать больше исключений, чем вам нужно. –

+0

Прошло некоторое время с тех пор, как я использовал Forms, но одна вещь, которую я помню, это то, что для Error, Information и общего сообщения есть разные всплывающие окна всплывающих подсказок, и было хорошей идеей написать стандартный набор 'pop_error' /' pop_info' и т. д., и повторно использовать их по мере необходимости. Например, аромат «ошибки» прекратится с отказом, а «информация» - нет. –

0

Вы должны либо гарантировать, что в указанном столбце будет вставлено подходящее значение, которое не принимает нулевое значение, вы должны использовать функцию NVL внутри инструкции insert. Ну, неплохо также иметь технику. handle Oracle Forms errors and informative messages

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

+0

Я не хочу тщательно ремонтировать txtspk каждый раз, когда вы его повторно добавляете - если у вас есть поправки, пожалуйста, убедитесь, что вы используете настоящие слова (например, «u» означает «вы»), и, пожалуйста, не делайте подписывайте свои сообщения. Ваш блок sig является достаточно хорошей подписью. Функции кода лучше 'FORMATTED()', а не ** BOLDED() ** тоже - используйте обратные ссылки для встроенного форматирования. – halfer

+0

Почему это не бесплатно писать, как мне нравится выражать слова в ярлыках и т. Д. кто ты? Я не понимаю, почему вы так точны в ответе? где я могу найти эти детали? –

+0

По разным причинам. Отчасти, чтобы избежать downvotes, потому что некоторые люди находят txtspk раздражающим. Отчасти потому, что [правописание и грамматика важны] (https://stackoverflow.com/help/how-to-ask). Отчасти потому, что вам нужно быть в порядке [с другими людьми, редактирующими ваши сообщения] (https://stackoverflow.com/help/editing). Отчасти [потому что это мнение сообщества] (http://meta.stackoverflow.com/q/293779).Отчасти потому, что я здесь уже несколько лет, и я вобрал в себя несколько тем о том, как нам нравятся записи, которые нужно написать. – halfer

-1

Вы можете использовать The Default Oracle Forms Menu Tool Bar, чтобы обрабатывать операции CRUD формы для вас. Вместо написания вставки, обновления и т. Д.

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