MySQL EXIT HANDLER не ловит все ошибки? - PullRequest
1 голос
/ 16 мая 2011

Моя процедура MySQL выглядит следующим образом:

create procedure create_feed (_id int)
begin
    declare exit handler for sqlexception
    begin
        rollback;
        select false;
    end;

    start transaction;

    insert into t1(id)
    values (_id);

    insert into wrong_table_name (id, createdtime)
    values (
        _id,
        CURRENT_TIMESTAMP
    );

    commit;
    select true;
end//

После того, как я вызвал эту процедуру, таблица t1 обновляется и возвращается значение 'true'. неправильное_имя_таблицы вообще не существует.Почему?

1 Ответ

0 голосов
/ 17 мая 2011

Я рекомендую вам использовать функцию вместо процедуры, если вы хотите, чтобы она возвращала значение. Другой вариант - использовать параметры, если вы хотите, чтобы ваша процедура возвращала одно или несколько значений.

Тем не менее, я удивлен вашими результатами. Если wrong_table_name не существует, то этот proc должен вернуть true. Что касается обновления t1, это произойдет, если вы используете нетранзакционный механизм хранения, такой как MyISAM, который игнорирует откат.

Я протестировал ваш код в MySQL 5.5.8, и он работал правильно для меня. А именно, он всегда входил в обработчик выхода, когда wrong_table_name не существовало.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...