Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Oracle Новый топик    Ответить
 Обработка exception'ов  [new]
Вячеслав Банкет
Member

Откуда: NY (Нефтеюганск)
Сообщений: 139
В табличке T два уникальных индекса: созданный по первичному ключу и FBI:
create table T
(
  COLLECTION_ID INTEGER not null,
  ELEMENT_ID    INTEGER not null,
  ELEMENT_ORDER NUMBER(3),
  IS_DEL        NUMBER(1) default 0 not null
);

alter table T
  add constraint PK_T primary key (COLLECTION_ID, ELEMENT_ID, IS_DEL);

create unique index UI_ELEMENT on OBJ_KIT_SET (DECODE(IS_DEL,0,ELEMENT_ID));

Нужно по-разному обрабатывать исключения DUP_ON_VAL_INDEX от разных индексов. Например, по FBI-индексу UI_ELEMENT - выдавать пользовательское исключение, а по PK - молча работать дальше, не отрабатывая вставку/изменение и не транслируя исключение пользователю.
Как бы это сделать красиво на уровне тригеров?
3 сен 10, 09:59    [9376537]     Ответить | Цитировать Сообщить модератору
 Re: Обработка exception'ов  [new]
Вячеслав Любомудров
Member

Откуда: Владивосток
Сообщений: 18486
Вячеслав Банкет
Как бы это сделать красиво на уровне тригеров?
Никак
3 сен 10, 10:02    [9376555]     Ответить | Цитировать Сообщить модератору
 Re: Обработка exception'ов  [new]
брадобрей
Member

Откуда:
Сообщений: 4696
Это красиво делается не в триггерах.
3 сен 10, 10:03    [9376564]     Ответить | Цитировать Сообщить модератору
 Re: Обработка exception'ов  [new]
JaRo
Member

Откуда:
Сообщений: 1659
А причем тут триггер? В триггере Вы перехватите только то, что случилось именно в нём.
ЗЫ: По основному вопросу - просто проверяйте явно.
3 сен 10, 10:03    [9376567]     Ответить | Цитировать Сообщить модератору
 Re: Обработка exception'ов  [new]
Вячеслав Любомудров
Member

Откуда: Владивосток
Сообщений: 18486
Хотя, если работать через VIEW можно попытаться юзать триггер INSTEAD OF
В нем перехватывать исключения и анализируя текст ошибки либо генерить свое, либо проглатывать
3 сен 10, 10:04    [9376572]     Ответить | Цитировать Сообщить модератору
 Re: Обработка exception'ов  [new]
comphead
Member

Откуда: Киев
Сообщений: 3390
Вячеслав Банкет,

автор

Как бы это сделать красиво на уровне
тригеров
?


это как???
3 сен 10, 10:04    [9376579]     Ответить | Цитировать Сообщить модератору
 Re: Обработка exception'ов  [new]
Филарет
Member

Откуда:
Сообщений: 539
Вячеслав Банкет
по PK - молча работать дальше, не отрабатывая вставку/изменение и не транслируя исключение пользователю.

не пойму: кто-то хочет, что-то вставить. мы тупо херим запрос и работаем дальше. как будто ничего и не было?
3 сен 10, 10:08    [9376614]     Ответить | Цитировать Сообщить модератору
 Re: Обработка exception'ов  [new]
comphead
Member

Откуда: Киев
Сообщений: 3390
Филарет,

нет. в одном случае мы генерим експешн, во втором супрессим.
а именнованое исключение на эти два случая все равно одно DUP_CAL_ON_INDEX

в этом случае действительно поможет парсинг текста ошибки
3 сен 10, 10:16    [9376710]     Ответить | Цитировать Сообщить модератору
 Re: Обработка exception'ов  [new]
wildwind
Member

Откуда: Москва
Сообщений: 1296
брадобрей
Это красиво делается не в триггерах.
Например, можно заменить insert на merge по PK без insert (с fake insert в 9i), тогда DUP_ON_VAL_INDEX будет возникать только на втором ключе. И триггер получается не нужен.
3 сен 10, 10:55    [9377144]     Ответить | Цитировать Сообщить модератору
 Re: Обработка exception'ов  [new]
Вячеслав Банкет
Member

Откуда: NY (Нефтеюганск)
Сообщений: 139
Вячеслав Любомудров
Вячеслав Банкет
Как бы это сделать красиво на уровне тригеров?
Никак

Да, видимо, красиво это никак не сделать.
wildwind
брадобрей
Это красиво делается не в триггерах.
Например, можно заменить insert на merge по PK без insert (с fake insert в 9i), тогда DUP_ON_VAL_INDEX будет возникать только на втором ключе. И триггер получается не нужен.

Вставка в эту табличку происходит уже в нескольких местах. Хз где и кто ещё будет писать insert'ы в эту табличку. Не заставишь же всех правильно обработку exception'ов вести или писать merge вместо insert'ов. Найдётся кто-нибудь, кто напишет insert (если не найдётся - сам напишу по забывчивости ))).
Вьюху городить не кошерно.
Видимо, сделаю на merge'ах...
3 сен 10, 12:05    [9377844]     Ответить | Цитировать Сообщить модератору
 Re: Обработка exception'ов  [new]
wildwind
Member

Откуда: Москва
Сообщений: 1296
Вячеслав Банкет
[quot Вячеслав Любомудров]Вставка в эту табличку происходит уже в нескольких местах. Хз где и кто ещё будет писать insert'ы в эту табличку. Не заставишь же всех правильно обработку exception'ов вести или писать merge вместо insert'ов. Найдётся кто-нибудь, кто напишет insert (если не найдётся - сам напишу по забывчивости ))).
На этот случай при проектировании немножко думают и дают всем API, а грант на insert наоборот не дают.
3 сен 10, 12:12    [9377921]     Ответить | Цитировать Сообщить модератору
 Re: Обработка exception'ов  [new]
Вячеслав Банкет
Member

Откуда: NY (Нефтеюганск)
Сообщений: 139
wildwind
Вячеслав Банкет
[quot Вячеслав Любомудров]Вставка в эту табличку происходит уже в нескольких местах. Хз где и кто ещё будет писать insert'ы в эту табличку. Не заставишь же всех правильно обработку exception'ов вести или писать merge вместо insert'ов. Найдётся кто-нибудь, кто напишет insert (если не найдётся - сам напишу по забывчивости ))).
На этот случай при проектировании немножко думают и дают всем API, а грант на insert наоборот не дают.

Не под любую задачу целесообразно выделять слой API.
3 сен 10, 12:22    [9378048]     Ответить | Цитировать Сообщить модератору
 Re: Обработка exception'ов  [new]
брадобрей
Member

Откуда:
Сообщений: 4696
Вячеслав Банкет
Не под любую задачу целесообразно выделять слой API.

программист!, вероятно, считает целесообразным подходом городить город в триггерах.
3 сен 10, 12:25    [9378077]     Ответить | Цитировать Сообщить модератору
 Re: Обработка exception'ов  [new]
Вячеслав Банкет
Member

Откуда: NY (Нефтеюганск)
Сообщений: 139
брадобрей,

[sarcasm]
Программист! Пиши для любой задачи свой API и не используй тригеры. Никогда!
[/sarcasm]
3 сен 10, 12:35    [9378170]     Ответить | Цитировать Сообщить модератору
 Re: Обработка exception'ов  [new]
Вячеслав Банкет
Member

Откуда: NY (Нефтеюганск)
Сообщений: 139
Что нужно было узнал. Всем спасибо! Топик закрыт.
3 сен 10, 12:36    [9378182]     Ответить | Цитировать Сообщить модератору
 Re: Обработка exception'ов  [new]
брадобрей
Member

Откуда:
Сообщений: 4696
Вячеслав Банкет
брадобрей,

[sarcasm]
Программист! Пиши для любой задачи свой API и не используй тригеры. Никогда!
[/sarcasm]

так и делаю
3 сен 10, 12:37    [9378192]     Ответить | Цитировать Сообщить модератору
Все форумы / Oracle Ответить