Новости
Документация
Download
Webboard
Поиск
FAQ/ЧаВо
Обратная связь




MySQL.RU - Webboard



Вернуться
Обработка ошибок в хранимых процедурах (KPH) 01/11/2005 - 10:54:20
      Re: Обработка ошибок в хранимых процедурах (Dinky) 01/11/2005 - 19:33:18
      Re: Обработка ошибок в хранимых процедурах (KPH) 02/11/2005 - 11:01:53
      Re: Обработка ошибок в хранимых процедурах (NULL) 14/01/2008 - 16:41:39

> Original message text:
> From: KPH - 01/11/2005 - 10:54:20
> Subject:Обработка ошибок в хранимых процедурах
> -----------------
> День добрый,
> Подскажите пожалуста как корректно организовать обработку ошибок (НЕ пользовательских) в хранимых процедурах с тем чтобы при ошибке откатить начатую в процедуре транзакцию и при этом вернуть через OUT параметр код возникшей ошибки. Я немогу найти функцию или переменную через которые пожно было бы узнать код ошибки. Получается что для каждого варианта ошибки нужно писать чтото вроде:
>
> DECLARE EXIT HANDLER FOR 1061
> BEGIN
> my_err=1061;
> ROLLBACK;
> END;
>
> Т.Е. каждая процедура в которой я хочу отловить и вернуть код ошибки
> должна содержать столько таких выражений сколько я предполагаю возможных в ней ошибок:
> ---------------------------------------------
> CREATE PROCEDURE p1(OUT my_err INTEGER)
> BEGIN
> ......
> DECLARE EXIT HANDLER FOR 1061
> BEGIN
> my_err=1061;
> ROLLBACK;
> END;
> DECLARE EXIT HANDLER FOR 1062
> BEGIN
> my_err=1062;
> ROLLBACK;
> END;
> ....
> и.т. далее
> ....
> /*логика процедуры*/
> ....
> END
> ----------------------------------------------
> Как то очень не красиво получается. Может обработчик хоть както можно вынести в отдельную функцию.
>
> Заранее спасибо.
>


From: Dinky - 01/11/2005 - 19:33:18
Subject:Обработка ошибок в хранимых процедурах
-----------------
ну вобщем-то да - предполагается, что ошибки надо обрабатывать по-разному ;) неужели настолько сложная процедура, что нельзя предусмотреть, что случится?
anyway, есть еще три предопределенных условия, может подойдет:
===========
-> DECLARE EXIT HANDLER FOR NOT FOUND BEGIN END;
-> DECLARE EXIT HANDLER FOR SQLEXCEPTION BEGIN END;
-> DECLARE EXIT HANDLER FOR SQLWARNING BEGIN END;
There are three predeclared conditions: NOT FOUND (no more rows), SQLEXCEPTION (error),
SQLWARNING (warning or note). Since they're predefined, you can use them without saying
DECLARE CONDITION. Indeed, if you tried to say something like “DECLARE SQLEXCEPTION
CONDITION ...” you'd get an error message.
==========

--
Dmitry



[Это сообщение - спам!]

Последние сообщения из форума

Уважаемые посетители форума MySQL.RU!
Убедительная просьба, прежде чем задавать свой вопрос в этом форуме, обратите внимание на разделы:
- ответы на наиболее часто задаваемые вопросы - FAQ
- раздел документация
- раздел поиск по сообщениям форума и документации
Также, старайтесь наиболее подробно указывать свою ситуацию (версию операционной системы, версию MySQL, версию программного обеспечения, по которому возникает вопрос, текст возникающих ошибок, и др.)
Помните, чем конкретнее Вы опишете ситуацию, тем больше шансов получить реальную помощь.
 Имя:
 E-mail:
 Тема:
 Текст:
Код подтверждения отправки: Code
32769



РЕКЛАМА НА САЙТЕ
  Создание сайтов | |