SQLinfo.ru - Все о MySQL

Форум пользователей MySQL

Задавайте вопросы, мы ответим

Вы не зашли.

#1 09.12.2008 17:15:29

Igor Panshin
Завсегдатай
Зарегистрирован: 04.06.2008
Сообщений: 62

Досрочное окончание процедуры

Вопрос связан с возможностью досрочного окончания процедурыю Есть ли возможность окончить процедуру досрочно. То есть это аналог оператора return. Я понимаю, что можно обернуть все тело процедуры конструкцией
if ...
then
... procedure body
end if;

Однако этого хотелось бы избежать и написать

if ... then stop procedure END IF;
... procedure body

Спасибо.

Неактивен

 

#2 09.12.2008 17:22:57

rgbeast
Администратор
MySQL Authorized Developer and DBA
Откуда: Москва
Зарегистрирован: 21.01.2007
Сообщений: 3878

Re: Досрочное окончание процедуры

Неактивен

 

#3 10.12.2008 10:10:17

Igor Panshin
Завсегдатай
Зарегистрирован: 04.06.2008
Сообщений: 62

Re: Досрочное окончание процедуры

Да спасибо. Правда в доке очень скудно и не сразу можно догадаться, что метку можно поставить прямо перед созданием процедуры.
Но это решение. В принципе ниже дано два решения. Можно еще окончить при помощи провозглашения обработчика ошибок. Вопрос, какие недостатки имеет второй способ по сравнению с первым?

CREATE PROCEDURE `dvsp_binary_write_data` ( out ReturnValue int)

end_label:
BEGIN
       DECLARE CONTINUE HANDLER FOR SQLSTATE '42000' BEGIN END;
-- first
    SET ReturnValue=0;
    IF ReturnValue=0 THEN LEAVE end_label; END IF;
-- second
    IF ReturnValue=0 THEN call `not_existence_procedure`();  END IF;

                -- any other operator of the procedure body

    select * from dvsys_users;

END;

Неактивен

 

#4 10.12.2008 12:01:45

rgbeast
Администратор
MySQL Authorized Developer and DBA
Откуда: Москва
Зарегистрирован: 21.01.2007
Сообщений: 3878

Re: Досрочное окончание процедуры

Результат будет одинаковым, первый способ более прямой.

Неактивен

 

Board footer

Работает на PunBB
© Copyright 2002–2008 Rickard Andersson