Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности

Новые сообщения [новые:0]
Дайджест
Горячие темы
Избранное [новые:0]
Форумы
Пользователи
Статистика
Статистика нагрузки
Мод. лог
Поиск
|
|
25.12.2018, 09:59
|
|||
|---|---|---|---|
|
|||
Использование сообщения RAISERROR |
|||
|
#18+
Добрый день. 2 хранимые процедуры, первая вызывает вторую... если во второй процедуре в конструкции TRY..CATCH возникает ошибка, идёт её обработка и описание ошибки возвращается через RAISERROR в блоке CATCH. Вопрос, можно ли каким-то образом текст ошибки получить в первой хранимой процедуре (которая вызвала вторую) передав её в переменную? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
25.12.2018, 10:43
|
|||
|---|---|---|---|
|
|||
Использование сообщения RAISERROR |
|||
|
#18+
... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
25.12.2018, 12:09
|
|||
|---|---|---|---|
|
|||
Использование сообщения RAISERROR |
|||
|
#18+
Игорь_UUS, почему в переменную? Исключение надо передавать на самый верхний уровень. Используйте Throw. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
25.12.2018, 12:27
|
|||
|---|---|---|---|
|
|||
Использование сообщения RAISERROR |
|||
|
#18+
Владислав КолосовИгорь_UUS, почему в переменную? Исключение надо передавать на самый верхний уровень. Используйте Throw. Throw не могу т.к. mssql2008 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
25.12.2018, 12:34
|
|||
|---|---|---|---|
|
|||
Использование сообщения RAISERROR |
|||
|
#18+
Игорь_UUS, попробуйте в сочетании с SET XACT_ABORT = ON, у меня нет 2008, чтобы проверить. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
25.12.2018, 13:08
|
|||
|---|---|---|---|
|
|||
Использование сообщения RAISERROR |
|||
|
#18+
Владислав Колосов, Дело даже не в этом... есть костыль для api... Я бы сказал ответ верхнему ПО идёт по 2-м разным сценариям, в одном случае это десктоповое приложение, которое как раз таки обрабатывает ошибки как надо, и есть api, модули на php. Но вот обработка ошибок там идёт не так "как надо" в виде передачи ошибки в возвращаемую переменную. А бизнес логика одна... т.е. интерфейсные хранимые процедуры десктоповой программы и интерфнйсные процедуры для api используют одни и те же процедуры бизнес логике. Информирование об ошибках (или уведомление) верхнему ПО идёт через RAISERROR и кода RETURN самой процедуры (если код = 0, то обработка прошла успешна). И получается, если по линии api идёт что-то не так, то как мне отловить то что было передано в "недрах бизнес логике" через RAISERROR ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
25.12.2018, 16:28
|
|||
|---|---|---|---|
|
|||
Использование сообщения RAISERROR |
|||
|
#18+
Игорь_UUS, для реализации API обычно пишут процедуры - обертки, там простой SELECT ERROR_MESSAGE() в блоке CATCH. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
25.12.2018, 17:11
|
|||
|---|---|---|---|
|
|||
Использование сообщения RAISERROR |
|||
|
#18+
Игорь_UUS, Output variables можно использовать: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. Если такие параметры есть по всему стеку вызовов, то передать ошибку на самый верх можно безо всяких RAISERROR или THROW. Главное, не забывать добавлять output к этим параметрам при вызове из других хранимок. Ну и с транзакциями аккуратнее, следите за значением @@trancount (не забываем, что в сиквеле вложенных транзакций нет) и состоянием set xact_abort. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
26.12.2018, 08:53
|
|||
|---|---|---|---|
|
|||
Использование сообщения RAISERROR |
|||
|
#18+
Владислав КолосовИгорь_UUS, для реализации API обычно пишут процедуры - обертки, там простой SELECT ERROR_MESSAGE() в блоке CATCH. Но CATCH ловит только те сообщения, которые имеют уровень серьёзности более 10. В этом случае десктоповое приложение "кидает" исключение (так работает компонент FireDAC... уфф и это правильно)... тут придётся переделывать очень много, так сказать обернуть "верхние уровни" бизнес логики в блок CATCH и переориентировать ошибку в низкий уровень серьёзности... я правильно понимаю, то что сообщения с уровнем серьёзности менее 11 перехватить или прочитать невозможно? т.е. таких методов в самом mssql нет? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
26.12.2018, 09:34
|
|||
|---|---|---|---|
|
|||
Использование сообщения RAISERROR |
|||
|
#18+
Игорь_UUSя правильно понимаю, то что сообщения с уровнем серьёзности менее 11 перехватить или прочитать невозможно? т.е. таких методов в самом mssql нет? RAISERROR c severity<=10 - это, по сути, обычные текстовые сообщения. Их вполне прекрасно можно прочитать в клиентском приложении (например, вот так , или вот так ). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
26.12.2018, 10:52
|
|||
|---|---|---|---|
|
|||
Использование сообщения RAISERROR |
|||
|
#18+
Сон Веры ПавловныИгорь_UUSя правильно понимаю, то что сообщения с уровнем серьёзности менее 11 перехватить или прочитать невозможно? т.е. таких методов в самом mssql нет? RAISERROR c severity<=10 - это, по сути, обычные текстовые сообщения. Их вполне прекрасно можно прочитать в клиентском приложении (например, вот так , или вот так ). В десктоповом приложении как раз таки полный порядок с "обычными сообщениями" (перехватываю и читаю)... а вот в "обёртках" для API - нет вопрос можно ли их перехватить в бизнес логике MSSQL? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|

start [/forum/topic.php?fid=46&tablet=1&tid=1688524]: |
0ms |
get settings: |
9ms |
get forum list: |
19ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
68ms |
get topic data: |
11ms |
get forum data: |
4ms |
get page messages: |
54ms |
get tp. blocked users: |
2ms |
| others: | 266ms |
| total: | 439ms |

| 0 / 0 |
