SQLinfo.ru - Все о MySQL

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

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

Вы не зашли.

#1 27.08.2007 18:58:19

Golova
Завсегдатай
Зарегистрирован: 23.03.2007
Сообщений: 92

хранимые процедуры. синтаксис.

данный код проходит успешно на сервере с версией 5.0.22
и генерирует ошибку на сервере 5.0.44 - "ERROR 1308 (42000) at line 8: LEAVE with no matching label: main"
как я понимаю сервер не видит метку main: но почему это зависит от версии?
Может кто знает в чем дело?

create database tst;
use tst;

DELIMITER $$

DROP PROCEDURE IF EXISTS `tst`.`sp_tst`$$
CREATE DEFINER=`root`@`localhost` PROCEDURE `sp_tst`(
    IN in_id INT,

    OUT out_ret_val INT,
    OUT out_err_desc varchar(255) #Upon failure will contain error textual description.
    )
    COMMENT 'test SP'
main: BEGIN

DECLARE EXIT HANDLER FOR SQLEXCEPTION
BEGIN
    SET out_err_desc = CONCAT(out_err_desc, ' SQLEXCEPTION occured.');
    LEAVE main;
END;

DECLARE EXIT HANDLER FOR SQLWARNING
BEGIN
    SET out_err_desc = CONCAT(out_err_desc, ' SQLWARNING occured.');
    LEAVE main;
END;

DECLARE EXIT HANDLER FOR NOT FOUND
BEGIN
    SET out_err_desc = CONCAT(out_err_desc, ' NOT FOUND.');
    LEAVE main;
END;


SET out_err_desc = 'OK.';
SET out_ret_val = 0;

END$$

DELIMITER ;

Неактивен

 

#2 27.08.2007 19:28:33

paulus
Администратор
MySQL Authorized Developer and DBA
Зарегистрирован: 22.01.2007
Сообщений: 6757

Re: хранимые процедуры. синтаксис.

Сервер обижается на то, что Вы определяете обработчик типа EXIT, т.е. в процедуру
он уже никогда не вернется. Как следствие, метки main в его контексте действительно
нету. Почему сменился контекст - это вопрос скорее к разработчикам MySQL. Думаю,
в данном случае ошибка должна быть, хотя, возможно, ее следует пояснять подробнее.

P.S.
Проверил также на CONTINUE HANDLER - в этом случае, как и ожидалось, ошибки нет.

Неактивен

 

#3 27.08.2007 19:43:41

Golova
Завсегдатай
Зарегистрирован: 23.03.2007
Сообщений: 92

Re: хранимые процедуры. синтаксис.

кажется понял, таким образом я делал масло масленое. спасибо.

Неактивен

 

Board footer

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