|
|
|
Сообщение после срабатывания exception
|
|||
|---|---|---|---|
|
#18+
Добрый день. Прописал в триггере переменную exception, и когда вводят уже существующее значение, поднимается эта переменная и появляется следующее окно: 1 error has occurred User-Defined Exception Как-то его заменить на сообщение вида 'введено уже существующее значение' можно? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.11.2014, 16:04 |
|
||
|
Сообщение после срабатывания exception
|
|||
|---|---|---|---|
|
#18+
Oleg3412, Если речь идет об Апексе, такие вещи обрабатываются в Validation и выдается сообщение которое необходимо. Если же надо чтобы выдал триггер нужное сообщение, то это на другой форум. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.11.2014, 16:30 |
|
||
|
Сообщение после срабатывания exception
|
|||
|---|---|---|---|
|
#18+
blkangel, Да не. Триггер как я понял нормально ругается. Это апекс вместе текста возвращает User-Defined Exception. А нужен текст из raise_application_error(-20000, 'I`m error') ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.11.2014, 16:33 |
|
||
|
Сообщение после срабатывания exception
|
|||
|---|---|---|---|
|
#18+
Да, с раисой-20000 работает. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.11.2014, 17:12 |
|
||
|
Сообщение после срабатывания exception
|
|||
|---|---|---|---|
|
#18+
Oleg3412, post чем делаем? триггер чем запускаем? )) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.11.2014, 17:25 |
|
||
|
Сообщение после срабатывания exception
|
|||
|---|---|---|---|
|
#18+
Все таки я считаю полным извратом, 1. создать триггер 2. В триггере объявить свой эксепшен 3. Вернуть из триггера красивый матюгальник. И все это вместо стандартного функционала. P.S. Если с расисой работает, воспользуйся этим. exception when USER_EXCEPTION then raise_application_error(-21111,'Бла бла'); Сложно подсказать, если не не знаешь цели. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.11.2014, 09:38 |
|
||
|
Сообщение после срабатывания exception
|
|||
|---|---|---|---|
|
#18+
blkangelВсе таки я считаю полным извратом, ты не прав. Кроме APEX'a може быть ещё, и не один клиент, на той-же БД. Т.е. оборачивать сообщения из триггера всё рано нужно будет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.11.2014, 10:03 |
|
||
|
Сообщение после срабатывания exception
|
|||
|---|---|---|---|
|
#18+
Petro123ты не прав. Кроме APEX'a може быть ещё, и не один клиент, на той-же БД. Он прав, а ты - нет. Если нужно отрабатывать одинаковые ошибки в апексе и не в апексе, сделай пакет с именоваными ексепшенами, отдели "предсказуемые ошибки", по которым можешь вывести человеческое сообщение, от системных, которые случились по вине разработчика, напиши два обработчика ошибок, один который использует механизмы Апекс для отображения, второй - для другой системы. Ошибки которые можно опказать пользователю показывай, если пользователю сказать нечего - сформируй баг в апексе (там есть апи у баг трекера), присвой номер, дай номе и ссылку пользователю, пришли сообщение разрабботчику. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.11.2014, 11:45 |
|
||
|
Сообщение после срабатывания exception
|
|||
|---|---|---|---|
|
#18+
Casufi, Первая половина уже сделана и ничего писать не надо: - в оракле есть raise_application_error(-20000, 'I`m error') т.е. у меня есть номера выше 20000 и в Delphi я ловлю как текст, так и номер . ..... Ошибка: Такой пользователь уже удалён, "пока вы думали в монитор" - пользовательское. .......... Как мне его сделать в APEX? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.11.2014, 12:12 |
|
||
|
Сообщение после срабатывания exception
|
|||
|---|---|---|---|
|
#18+
Casufiмеханизмы Апекс для отображения про это и сабж. Только не путать с валидацией. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.11.2014, 12:21 |
|
||
|
Сообщение после срабатывания exception
|
|||
|---|---|---|---|
|
#18+
Petro123Casufiмеханизмы Апекс для отображения про это и сабж. Только не путать с валидацией. А валидация что такое? Проверка с выводом сообщения, то что и нужно автору. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.11.2014, 14:07 |
|
||
|
Сообщение после срабатывания exception
|
|||
|---|---|---|---|
|
#18+
blkangelPetro123пропущено... про это и сабж. Только не путать с валидацией. А валидация что такое? Проверка с выводом сообщения, то что и нужно автору. это вторичный ДОП-уровень только для ГУИ. Например, если в поле Цена вводят текст. То основная проверка - в БД (Модель). Дополнительная - в ГУИ, JS\APEX (VIEW). Вторую делают по вкусу и не всегда. IMHO ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.11.2014, 14:35 |
|
||
|
Сообщение после срабатывания exception
|
|||
|---|---|---|---|
|
#18+
blkangel, жёстко, но...тоже мнение.... http://www.foxbase.ru/oracle-apex/soobshcheniya-v-protsessakh-oracle-apex.htm/comment-page-1 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.11.2014, 14:37 |
|
||
|
Сообщение после срабатывания exception
|
|||
|---|---|---|---|
|
#18+
Petro123blkangelВсе таки я считаю полным извратом, Т.е. оборачивать сообщения из триггера всё рано нужно будет. Не нужно, если constraints БД настроен. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.11.2014, 15:19 |
|
||
|
Сообщение после срабатывания exception
|
|||
|---|---|---|---|
|
#18+
blkangelНе нужно, если constraints БД настроен. я вам о триггере и бизнес-логике там. Пусть даже в хранимке, которая в триггере. А вы об условиях на поле БД. Приведите пример сообщения от constraints ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.11.2014, 15:28 |
|
||
|
Сообщение после срабатывания exception
|
|||
|---|---|---|---|
|
#18+
blkangel, вот ещё, если никто не видит проблемы http://www.sql.ru/forum/actualutils.aspx?action=gotomsg&tid=1011658&msg=14070237 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.11.2014, 15:31 |
|
||
|
Сообщение после срабатывания exception
|
|||
|---|---|---|---|
|
#18+
Oleg3412Прописал в триггере переменную exception, и когда вводят уже существующее значение, поднимается эта переменная Попытки организовать контроль целостности триггерами вместо ограничений заканчиваются крахом, когда с данными начинает работать больше одного пользователя. Автор, Вы создаёте очередную тему про триггеры и борьбу с уже существующим значением, но лично я так и не понял, какую задачу Вы пытаетесь решить: аудит, борьба с повторными отправлениями только что введённых данных, ещё что-то? Потратьте полчаса, сформулируйте задачу и поделитесь с форумом. Пока что хочется сказать: откажитесь от триггеров. Они не нужны Вам. Вам нужны: нормализация схемы БД; ограничения целостности; использование пакета APEX_ERROR (RTFM Error Handling ). Это позволит Вам выполнять требования уникальности строк и внятных сообщений об ошибках. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.11.2014, 22:52 |
|
||
|
Сообщение после срабатывания exception
|
|||
|---|---|---|---|
|
#18+
suPPLerПопытки организовать контроль целостности триггерами вместо ограничений заканчиваются крахом, когда с данными начинает работать больше одного пользователя. например такой юз-кейс или вариант использования (ВИ): В таблице А нельзя закрывать поле A.field, если в ИС нет ни одного рисунка (БЛОБ). Т.е. нужен подзапрос на проверку из триггера. check constraint не позволяет подзапросы( А БЛ, как в Java, в АппСервер не засунуть. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.11.2014, 19:08 |
|
||
|
Сообщение после срабатывания exception
|
|||
|---|---|---|---|
|
#18+
Petro123В таблице А нельзя закрывать поле A.field, если в ИС нет ни одного рисунка (БЛОБ). Т.е. нужен подзапрос на проверку из триггера. Материализованное представление с ограничением целостности и API для работы с таблицей A. А Ваш триггер в условиях многопользовательской работы с БД будет источником нарушенной целостности данных. Он ведь не сможет помешать в одной сессии удалить все LOB, а во второй изменить поле A.field до фиксации транзакции первой сессией. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.11.2014, 00:13 |
|
||
|
Сообщение после срабатывания exception
|
|||
|---|---|---|---|
|
#18+
suPPLer, API это все через хранимки и никаких submit. Это слишком радикально. Тогда и матвьюха не нужна. А мешать технологии не хотелось бы. Если же триггер, то просто на Обе таблицы. И будет целостность. Надо думать. Уже завтра данная задача стоит. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.11.2014, 13:00 |
|
||
|
Сообщение после срабатывания exception
|
|||
|---|---|---|---|
|
#18+
suPPLer, Насколько понял, в Apex, все транзакции короткие. Это исключает проблемы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.11.2014, 13:05 |
|
||
|
Сообщение после срабатывания exception
|
|||
|---|---|---|---|
|
#18+
Petro123suPPLer, API это все через хранимки и никаких submit. Это слишком радикально. Снизить радикализм помогут представления и триггеры INSTEAD OF, вызывающие API. Это ещё и дополнительный слой в контроле доступа к данным. Petro123Тогда и матвьюха не нужна. Для сложных условий целостности данных — нужна вместе с декларативными ограничениями целостности. Petro123Если же триггер, то просто на Обе таблицы. И будет целостность. Нет. У Вас недопонимание многопользовательской работы. Сессии не видят не зафиксированные изменения других сессий. RTFM Data Concurrency and Consistency . И да, триггер на обе таблицы не создаётся. Либо два триггера, либо одна таблица. Petro123suPPLer, Насколько понял, в Apex, все транзакции короткие. Это исключает проблемы. С чего вдруг? Десять процессов сработает на странице — это короткая или длинная транзакция? Миллион строк вставится в пять таблиц двух разных БД в результате вызова процедуры — это короткая или длинная транзакция? Задание на пару часов, созданное через APEX_PLSQL_JOB, будет длинной или короткой транзакцией? Вас не длительность транзакции должна волновать, а возможность того, что одна сессия изменила поле, а вторая удалила данные, накладывающие дополнительные условия на значения этого поля. Триггеры эту ситуацию пропустят. Значит, они не подходят. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.11.2014, 15:34 |
|
||
|
Сообщение после срабатывания exception
|
|||
|---|---|---|---|
|
#18+
suPPLerPetro123suPPLer, API это все через хранимки и никаких submit. Это слишком радикально. Снизить радикализм помогут представления и триггеры INSTEAD OF, вызывающие API. Это ещё и дополнительный слой в контроле доступа к данным. ==== вот мы и пришли к началу топика. Я это и хотел. В триггере ХП в которой RAISE_APPLICATION Petro123Тогда и матвьюха не нужна. Для сложных условий целостности данных — нужна вместе с декларативными ограничениями целостности. ===== Хранимка _может_ покрыть любой изврат по требованиям к контролю. Petro123Если же триггер, то просто на Обе таблицы. И будет целостность. Нет. У Вас недопонимание многопользовательской работы. Сессии не видят не зафиксированные изменения других сессий. RTFM Data Concurrency and Consistency . === вы о чём? Сессии короткие, в момент POST = 0,1 сек. Кто кого не увидит? Там автоматом сразу везде коммит идёт. И да, триггер на обе таблицы не создаётся. Либо два триггера, либо одна таблица. ==== ДВА триггера на ОБЕ таблицы Petro123suPPLer, Насколько понял, в Apex, все транзакции короткие. Это исключает проблемы. С чего вдруг? Десять процессов сработает на странице — это короткая или длинная транзакция? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.11.2014, 15:52 |
|
||
|
Сообщение после срабатывания exception
|
|||
|---|---|---|---|
|
#18+
suPPLerВас не длительность транзакции должна волновать, а возможность того, что одна сессия изменила поле, а вторая удалила данные, накладывающие дополнительные условия на значения этого поля. Триггеры эту ситуацию пропустят. Значит, они не подходят. Вы конкретный пример бы привели. Если брать FK с каскадом, то будет так: - Пока я смотрел детей Папы Иванов Иван Иванович и желал поменять имя ребёнка на Вася. Кто-то друго грохнул Папу. Так? Тогда при submit моей страницы я получу ошибку от БД. Так? Это вас беспокоит? ..... Транзакции короткие, это значит, пока я смотрю на страничку, в БД нет моей транзакции. Или - Кто первый встал, того и тапки. Я не вижу тут проблем. ...Кроме перевода сообщений )))) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.11.2014, 16:13 |
|
||
|
Сообщение после срабатывания exception
|
|||
|---|---|---|---|
|
#18+
[quot suPPLer]Oleg3412 Попытки организовать контроль целостности триггерами вместо ограничений заканчиваются крахом, когда с данными начинает работать больше одного пользователя. Автор, Вы создаёте очередную тему про триггеры и борьбу с уже существующим значением, но лично я так и не понял, какую задачу Вы пытаетесь решить: аудит, борьба с повторными отправлениями только что введённых данных, ещё что-то? . Добрый день. Хочу, чтобы не было задваивания последнего значения в простой таблице для 30 юзеров. Я создал тему, потому что хотел убить поле, выскакивающее при несрабатывании триггера из-за exception. Прочитав Ваши комменты, понял, что с триггером так делать не следует. Я правильно понял свои дальнейшие действия, что в валидации буду прописывать запрос на поиск совпадений существующих значений в последней по дате строке с :NEW? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.11.2014, 23:25 |
|
||
|
|

start [/forum/topic.php?fid=50&fpage=37&tid=1875189]: |
0ms |
get settings: |
7ms |
get forum list: |
13ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
30ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
47ms |
get tp. blocked users: |
1ms |
| others: | 213ms |
| total: | 327ms |

| 0 / 0 |
