powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Oracle APEX [игнор отключен] [закрыт для гостей] / Сообщение после срабатывания exception
25 сообщений из 27, страница 1 из 2
Сообщение после срабатывания exception
    #38805114
Oleg3412
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день.

Прописал в триггере переменную exception, и когда вводят уже существующее значение, поднимается эта переменная и появляется следующее окно:

1 error has occurred
User-Defined Exception

Как-то его заменить на сообщение вида 'введено уже существующее значение' можно?
...
Рейтинг: 0 / 0
Сообщение после срабатывания exception
    #38805154
blkangel
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Oleg3412,
Если речь идет об Апексе, такие вещи обрабатываются в Validation и выдается сообщение которое необходимо.
Если же надо чтобы выдал триггер нужное сообщение, то это на другой форум.
...
Рейтинг: 0 / 0
Сообщение после срабатывания exception
    #38805160
Gustly
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
blkangel,

Да не. Триггер как я понял нормально ругается. Это апекс вместе текста возвращает User-Defined Exception. А нужен текст из raise_application_error(-20000, 'I`m error')
...
Рейтинг: 0 / 0
Сообщение после срабатывания exception
    #38805241
Oleg3412
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Да, с раисой-20000 работает.
...
Рейтинг: 0 / 0
Сообщение после срабатывания exception
    #38805267
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Oleg3412,
post чем делаем?
триггер чем запускаем? ))
...
Рейтинг: 0 / 0
Сообщение после срабатывания exception
    #38805758
blkangel
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Все таки я считаю полным извратом,
1. создать триггер
2. В триггере объявить свой эксепшен
3. Вернуть из триггера красивый матюгальник.
И все это вместо стандартного функционала.


P.S. Если с расисой работает, воспользуйся этим. exception when USER_EXCEPTION then raise_application_error(-21111,'Бла бла');

Сложно подсказать, если не не знаешь цели.
...
Рейтинг: 0 / 0
Сообщение после срабатывания exception
    #38805807
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
blkangelВсе таки я считаю полным извратом,
ты не прав.
Кроме APEX'a може быть ещё, и не один клиент, на той-же БД.
Т.е. оборачивать сообщения из триггера всё рано нужно будет.
...
Рейтинг: 0 / 0
Сообщение после срабатывания exception
    #38805987
Casufi
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123ты не прав.
Кроме APEX'a може быть ещё, и не один клиент, на той-же БД.
Он прав, а ты - нет.
Если нужно отрабатывать одинаковые ошибки в апексе и не в апексе, сделай пакет с именоваными ексепшенами, отдели "предсказуемые ошибки", по которым можешь вывести человеческое сообщение, от системных, которые случились по вине разработчика, напиши два обработчика ошибок, один который использует механизмы Апекс для отображения, второй - для другой системы. Ошибки которые можно опказать пользователю показывай, если пользователю сказать нечего - сформируй баг в апексе (там есть апи у баг трекера), присвой номер, дай номе и ссылку пользователю, пришли сообщение разрабботчику.
...
Рейтинг: 0 / 0
Сообщение после срабатывания exception
    #38806057
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Casufi,
Первая половина уже сделана и ничего писать не надо:
- в оракле есть
raise_application_error(-20000, 'I`m error')
т.е. у меня есть номера выше 20000 и в Delphi я ловлю как текст, так и номер .
.....
Ошибка: Такой пользователь уже удалён, "пока вы думали в монитор" - пользовательское.
..........
Как мне его сделать в APEX?
...
Рейтинг: 0 / 0
Сообщение после срабатывания exception
    #38806079
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Casufiмеханизмы Апекс для отображения
про это и сабж.
Только не путать с валидацией.
...
Рейтинг: 0 / 0
Сообщение после срабатывания exception
    #38806339
blkangel
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Petro123Casufiмеханизмы Апекс для отображения
про это и сабж.
Только не путать с валидацией.
А валидация что такое? Проверка с выводом сообщения, то что и нужно автору.
...
Рейтинг: 0 / 0
Сообщение после срабатывания exception
    #38806391
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
blkangelPetro123пропущено...

про это и сабж.
Только не путать с валидацией.
А валидация что такое? Проверка с выводом сообщения, то что и нужно автору.
это вторичный ДОП-уровень только для ГУИ.

Например, если в поле Цена вводят текст.
То основная проверка - в БД (Модель).
Дополнительная - в ГУИ, JS\APEX (VIEW).
Вторую делают по вкусу и не всегда.
IMHO
...
Рейтинг: 0 / 0
Сообщение после срабатывания exception
    #38806393
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Сообщение после срабатывания exception
    #38806479
blkangel
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Petro123blkangelВсе таки я считаю полным извратом,
Т.е. оборачивать сообщения из триггера всё рано нужно будет.
Не нужно, если constraints БД настроен.
...
Рейтинг: 0 / 0
Сообщение после срабатывания exception
    #38806501
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
blkangelНе нужно, если constraints БД настроен.
я вам о триггере и бизнес-логике там. Пусть даже в хранимке, которая в триггере.
А вы об условиях на поле БД.
Приведите пример сообщения от constraints
...
Рейтинг: 0 / 0
Сообщение после срабатывания exception
    #38806507
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
blkangel,
вот ещё, если никто не видит проблемы
http://www.sql.ru/forum/actualutils.aspx?action=gotomsg&tid=1011658&msg=14070237
...
Рейтинг: 0 / 0
Сообщение после срабатывания exception
    #38806900
Фотография suPPLer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Oleg3412Прописал в триггере переменную exception, и когда вводят уже существующее значение, поднимается эта переменная

Попытки организовать контроль целостности триггерами вместо ограничений заканчиваются крахом, когда с данными начинает работать больше одного пользователя.

Автор, Вы создаёте очередную тему про триггеры и борьбу с уже существующим значением, но лично я так и не понял, какую задачу Вы пытаетесь решить: аудит, борьба с повторными отправлениями только что введённых данных, ещё что-то? Потратьте полчаса, сформулируйте задачу и поделитесь с форумом.

Пока что хочется сказать: откажитесь от триггеров. Они не нужны Вам. Вам нужны: нормализация схемы БД; ограничения целостности; использование пакета APEX_ERROR (RTFM Error Handling ). Это позволит Вам выполнять требования уникальности строк и внятных сообщений об ошибках.
...
Рейтинг: 0 / 0
Сообщение после срабатывания exception
    #38807157
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
suPPLerПопытки организовать контроль целостности триггерами вместо ограничений заканчиваются крахом, когда с данными начинает работать больше одного пользователя.
например такой юз-кейс или вариант использования (ВИ):
В таблице А нельзя закрывать поле A.field, если в ИС нет ни одного рисунка (БЛОБ).
Т.е. нужен подзапрос на проверку из триггера.
check constraint не позволяет подзапросы(
А БЛ, как в Java, в АппСервер не засунуть.
...
Рейтинг: 0 / 0
Сообщение после срабатывания exception
    #38807296
Фотография suPPLer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123В таблице А нельзя закрывать поле A.field, если в ИС нет ни одного рисунка (БЛОБ).
Т.е. нужен подзапрос на проверку из триггера.

Материализованное представление с ограничением целостности и API для работы с таблицей A.

А Ваш триггер в условиях многопользовательской работы с БД будет источником нарушенной целостности данных. Он ведь не сможет помешать в одной сессии удалить все LOB, а во второй изменить поле A.field до фиксации транзакции первой сессией.
...
Рейтинг: 0 / 0
Сообщение после срабатывания exception
    #38807431
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
suPPLer,
API это все через хранимки и никаких
submit. Это слишком радикально.
Тогда и матвьюха не нужна. А мешать технологии не хотелось бы.
Если же триггер, то просто на Обе таблицы. И будет целостность.
Надо думать. Уже завтра данная задача стоит.
...
Рейтинг: 0 / 0
Сообщение после срабатывания exception
    #38807435
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
suPPLer,
Насколько понял, в Apex, все транзакции короткие. Это исключает проблемы.
...
Рейтинг: 0 / 0
Сообщение после срабатывания exception
    #38807507
Фотография suPPLer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123suPPLer,
API это все через хранимки и никаких
submit. Это слишком радикально.
Снизить радикализм помогут представления и триггеры INSTEAD OF, вызывающие API. Это ещё и дополнительный слой в контроле доступа к данным.

Petro123Тогда и матвьюха не нужна.
Для сложных условий целостности данных — нужна вместе с декларативными ограничениями целостности.

Petro123Если же триггер, то просто на Обе таблицы. И будет целостность.
Нет. У Вас недопонимание многопользовательской работы. Сессии не видят не зафиксированные изменения других сессий. RTFM Data Concurrency and Consistency .

И да, триггер на обе таблицы не создаётся. Либо два триггера, либо одна таблица.

Petro123suPPLer,
Насколько понял, в Apex, все транзакции короткие. Это исключает проблемы.
С чего вдруг? Десять процессов сработает на странице — это короткая или длинная транзакция? Миллион строк вставится в пять таблиц двух разных БД в результате вызова процедуры — это короткая или длинная транзакция? Задание на пару часов, созданное через APEX_PLSQL_JOB, будет длинной или короткой транзакцией?

Вас не длительность транзакции должна волновать, а возможность того, что одна сессия изменила поле, а вторая удалила данные, накладывающие дополнительные условия на значения этого поля. Триггеры эту ситуацию пропустят. Значит, они не подходят.
...
Рейтинг: 0 / 0
Сообщение после срабатывания exception
    #38807519
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
suPPLerPetro123suPPLer,
API это все через хранимки и никаких
submit. Это слишком радикально.
Снизить радикализм помогут представления и триггеры INSTEAD OF, вызывающие API. Это ещё и дополнительный слой в контроле доступа к данным.

==== вот мы и пришли к началу топика. Я это и хотел. В триггере ХП в которой RAISE_APPLICATION


Petro123Тогда и матвьюха не нужна.
Для сложных условий целостности данных — нужна вместе с декларативными ограничениями целостности.

===== Хранимка _может_ покрыть любой изврат по требованиям к контролю.

Petro123Если же триггер, то просто на Обе таблицы. И будет целостность.
Нет. У Вас недопонимание многопользовательской работы. Сессии не видят не зафиксированные изменения других сессий. RTFM Data Concurrency and Consistency .

=== вы о чём? Сессии короткие, в момент POST = 0,1 сек. Кто кого не увидит? Там автоматом сразу везде коммит идёт.

И да, триггер на обе таблицы не создаётся. Либо два триггера, либо одна таблица.

==== ДВА триггера на ОБЕ таблицы

Petro123suPPLer,
Насколько понял, в Apex, все транзакции короткие. Это исключает проблемы.
С чего вдруг? Десять процессов сработает на странице — это короткая или длинная транзакция?
...
Рейтинг: 0 / 0
Сообщение после срабатывания exception
    #38807531
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
suPPLerВас не длительность транзакции должна волновать, а возможность того, что одна сессия изменила поле, а вторая удалила данные, накладывающие дополнительные условия на значения этого поля. Триггеры эту ситуацию пропустят. Значит, они не подходят.
Вы конкретный пример бы привели.
Если брать FK с каскадом, то будет так:
- Пока я смотрел детей Папы Иванов Иван Иванович и желал поменять имя ребёнка на Вася.
Кто-то друго грохнул Папу. Так?
Тогда при submit моей страницы я получу ошибку от БД.
Так? Это вас беспокоит?
.....
Транзакции короткие, это значит, пока я смотрю на страничку, в БД нет моей транзакции.
Или - Кто первый встал, того и тапки.
Я не вижу тут проблем.
...Кроме перевода сообщений ))))
...
Рейтинг: 0 / 0
Сообщение после срабатывания exception
    #38807707
Oleg3412
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
[quot suPPLer]Oleg3412
Попытки организовать контроль целостности триггерами вместо ограничений заканчиваются крахом, когда с данными начинает работать больше одного пользователя.

Автор, Вы создаёте очередную тему про триггеры и борьбу с уже существующим значением, но лично я так и не понял, какую задачу Вы пытаетесь решить: аудит, борьба с повторными отправлениями только что введённых данных, ещё что-то? .

Добрый день.

Хочу, чтобы не было задваивания последнего значения в простой таблице для 30 юзеров.

Я создал тему, потому что хотел убить поле, выскакивающее при несрабатывании триггера из-за exception.
Прочитав Ваши комменты, понял, что с триггером так делать не следует.

Я правильно понял свои дальнейшие действия, что в валидации буду прописывать запрос на поиск совпадений существующих значений в последней по дате строке с :NEW?
...
Рейтинг: 0 / 0
25 сообщений из 27, страница 1 из 2
Форумы / Oracle APEX [игнор отключен] [закрыт для гостей] / Сообщение после срабатывания exception
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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