powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Oracle Forms [игнор отключен] [закрыт для гостей] / Обработка исключений Oracle в Oracle Forms
8 сообщений из 8, страница 1 из 1
Обработка исключений Oracle в Oracle Forms
    #34584330
Ninon
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Господа, помогите, пожалуйста, советом. Есть таблица TABLE, у нее есть уникальный ключ по двум полям: AB_ID, SUBJ_ID. В форме есть блок, ассоциированный с этой таблицей, в блоке -- текстовые поля AB_ID, SUBJ_ID, ассоциированные с одноименными колонками в таблице и кнопка "Сохранить". При нажатии кнопки "Сохранить" выполняется команда Commit_form. Естественно, при попытке дважды вставить одну и ту же запись Forms пишет что-то вроде :FRM-40508 - unable to insert record, а, просмотрев причину ошибки, мы видим:ORA-00001: unique constraint violated.
Желательно, чтобы при нажатии кнопки "Сохранить" производилась проверка , не нарушается ли уникальность записей. Вопрос: как это сделать?
Обработка исключения dup_val_on_index ничего не дает.

Заранее благодарна.
...
Рейтинг: 0 / 0
Обработка исключений Oracle в Oracle Forms
    #34584498
k&k
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
k&k
Гость
...
Рейтинг: 0 / 0
Обработка исключений Oracle в Oracle Forms
    #34584560
mcureenab
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ninon
Желательно, чтобы при нажатии кнопки "Сохранить" производилась проверка , не нарушается ли уникальность записей.

Ну проверили и что дальше? Тот же самый FRM-40508 ?
...
Рейтинг: 0 / 0
Обработка исключений Oracle в Oracle Forms
    #34584565
mcureenab
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Собственно проверка уникальности и так происходит, иначе сообщение об ошибке не возникало. Уточни, пзл., что тебе не нравиться в стандарной процедуре?
...
Рейтинг: 0 / 0
Обработка исключений Oracle в Oracle Forms
    #34584763
OraDen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Можете перехватить сообщение и заменить на свое (почитайте help на предмет On-Error Trigger).
...
Рейтинг: 0 / 0
Обработка исключений Oracle в Oracle Forms
    #34584800
Ninon
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
OraDenМожете перехватить сообщение и заменить на свое (почитайте help на предмет On-Error Trigger).

Спасибо. Именно так я и сделаю. Просто я думала, что возможно каким-нибудь образом перехватить именно исключение оракла (ora-00001)...
...
Рейтинг: 0 / 0
Обработка исключений Oracle в Oracle Forms
    #34584843
mcureenab
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ninon OraDenМожете перехватить сообщение и заменить на свое (почитайте help на предмет On-Error Trigger).

Спасибо. Именно так я и сделаю. Просто я думала, что возможно каким-нибудь образом перехватить именно исключение оракла (ora-00001)...

Можно написать свой триггер ON-INSERT.
...
Рейтинг: 0 / 0
Обработка исключений Oracle в Oracle Forms
    #34584862
OraDen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кроме как в on-error перехватить ORA-00001 при коммите формы врятли получится, если блок не построен на транзакционных триггерах или процедурах. Пользуйтесь хелпом, в формсах он вполне полноценный.

DBMS_ERROR_CODE examples:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
/*  

** Built-in:  DBMS_ERROR_CODE,DBMS_ERROR_TEXT 
** Example:   Reword certain Form Builder error messages by
**            evaluating the DBMS error code that caused them 
** Trigger:   On-Error 
*/ 
DECLARE 
  errcode     NUMBER        := ERROR_CODE; 
  dbmserrcode NUMBER; 
  dbmserrtext VARCHAR2( 200 ); 
BEGIN 
  IF errcode =  40508  THEN 
    /* 
    ** Form Builder had a problem INSERTing, so 
    ** look at the Database error which 
    ** caused the problem. 
    */ 
    dbmserrcode := DBMS_ERROR_CODE; 
    dbmserrtext := DBMS_ERROR_TEXT; 

    IF dbmserrcode = - 1438  THEN 
      /* 
      ** ORA-01438 is "value too large for column" 
      */ 
      Message('Your number is too large. Try again.'); 
    ELSIF dbmserrcode = - 1400  THEN 
      /* 
      ** ORA-01400 is "Mandatory column is NULL"
      */ 
      Message('You forgot to provide a value. Try again.'); 
    ELSE 
      /* 
      ** Printout a generic message with the database 
      ** error string in it. 
      */     
      Message('Insert failed because of '||dbmserrtext);
    END IF; 
  END IF; 
END;  
...
Рейтинг: 0 / 0
8 сообщений из 8, страница 1 из 1
Форумы / Oracle Forms [игнор отключен] [закрыт для гостей] / Обработка исключений Oracle в Oracle Forms
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]