Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Oracle Forms [игнор отключен] [закрыт для гостей] / Обработка исключений Oracle в Oracle Forms / 8 сообщений из 8, страница 1 из 1
08.06.2007, 15:16
    #34584330
Ninon
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обработка исключений Oracle в Oracle Forms
Господа, помогите, пожалуйста, советом. Есть таблица 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
08.06.2007, 15:55
    #34584498
k&k
k&k
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обработка исключений Oracle в Oracle Forms
...
Рейтинг: 0 / 0
08.06.2007, 16:14
    #34584560
mcureenab
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обработка исключений Oracle в Oracle Forms
Ninon
Желательно, чтобы при нажатии кнопки "Сохранить" производилась проверка , не нарушается ли уникальность записей.

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

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

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

Можно написать свой триггер ON-INSERT.
...
Рейтинг: 0 / 0
08.06.2007, 17:40
    #34584862
OraDen
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обработка исключений Oracle в Oracle Forms
Кроме как в 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
Форумы / Oracle Forms [игнор отключен] [закрыт для гостей] / Обработка исключений Oracle в Oracle Forms / 8 сообщений из 8, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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