Сообщение при срабатывании констрейнта
Andrushk
Дата: 01.08.2005 16:51:57
Доброго времени суток!
Не подскажете, можно как-нибудь переопределить текст ошибки, возвращаемый при срабатывании констрейнта? Т.е., скажем я пытаюсь удалить запись, на которую ссылаются записи другой таблицы, возникает ошибка: "ORA-02292: integrity constraint (VNP.SYS_C002728) violated - child record found...." показывать ее пользователю бессмыслено, хочется вместо этого вывести что-то типа: "Имеется вышестоящий документ, удаление невозможно...". Можно как-то связать констрейнт и сообщение о его срабатывании?
alex-ls
Дата: 01.08.2005 17:00:55
Триггер можно написать...
А вообще это можно и на клиенте обработать или в процедуре удаления.
Vadim_Maximov
Дата: 01.08.2005 17:02:46
1. Сделать такую таблицу самостоятельно
2. При добавлении констрейна прописывать соответствие в таблице
3. На клиенте написать обработчик исключений, который бы лазил в таблицу и выдавал пользователю нормальное сообщение.
Реализуется элементарно.
Shtock
Дата: 01.08.2005 17:18:02
А можно сделать пакет, в котором объявлен массив и при инициализации ошибки туда загружаются. + - не дергается база. - - занимает память сервера.
softwarer
Дата: 01.08.2005 17:35:05
Shtock |
А можно сделать пакет, в котором объявлен массив и при инициализации ошибки туда загружаются. + - не дергается база. - - занимает память сервера. |
Хм. Есть слабая надежда, что ошибки в приложении не настолько часты, чтобы "дергание базы" оказалось страшнее траты оперативки на хранение этой таблицы.
Vadim_Maximov
Дата: 01.08.2005 17:37:16
softwarer |
Shtock | А можно сделать пакет, в котором объявлен массив и при инициализации ошибки туда загружаются. + - не дергается база. - - занимает память сервера. |
Хм. Есть слабая надежда, что ошибки в приложении не настолько часты, чтобы "дергание базы" оказалось страшнее траты оперативки на хранение этой таблицы. |
Приложения разные бывают
Andrushk
Дата: 01.08.2005 17:42:23
Триггер понятно, так и сделано.
Есть куча своих минусов, плюс получается, одна проверка два раза делается...
Обработчик тоже вобщем-то ясно...но меня смущает то что придется разбирать оракловую ошибку и выделять номер констрейнта...вообще, не хочется это переносить на клиента, хочется чтобы ошибка пришла ему уже в понятном виде.
Про пакет не понял...можно подробнее?
Вообще идея то какая. Раз есть констрейнт, значит я сам ничего проверять не должен. Раз Oracle при срабатывании констрейнта генерит сообщение об ошибке, значит надо как-то ему сказать, что для данного констрейнта надо вывести вот такой текст...Вопрос, можно это сделать? Да, забыл написать, версия Oracle 8.1.7...
softwarer
Дата: 01.08.2005 19:09:38
Vadim_Maximov |
Приложения разные бывают  |
Бывают. Но даже для разных buffer cache + shared pool, полагаю, сработают эффективнее, нежели хранение достаточно большой таблицы отдельно для каждой из нескольких сотен-тысяч сессий :)
Shtock
Дата: 02.08.2005 09:06:01
У нас в приложении одновременно сидит не более 100 пользователей (правда коннектов может быть больше - около 250-300).Плюс к таблице ошибок в памяти у меня еще висят данные по системе контроля доступа. Пока ничего не жужит.
Bely
Дата: 02.08.2005 10:35:34
softwarer |
Shtock | А можно сделать пакет, в котором объявлен массив и при инициализации ошибки туда загружаются. + - не дергается база. - - занимает память сервера. |
Хм. Есть слабая надежда, что ошибки в приложении не настолько часты, чтобы "дергание базы" оказалось страшнее траты оперативки на хранение этой таблицы. |
Есть такая же надежда, что размер этого пакета не сможет оказать критического влияния на недостачу серверной памяти.