Пользовательские переменные MySQL теряют значение сразу? - PullRequest
0 голосов
/ 07 июля 2011

Так что у меня проблема с MySQL 5.5, которая собирается свести меня с ума.У меня есть несколько вложенных хранимых процедур, и одна из них вставляет некоторые данные в таблицу, а затем выбирает LAST_INSERT_ID() в выходной параметр.Ниже приведена моя хранимая процедура:

DELIMITER $$

CREATE DEFINER=`root`@`localhost` PROCEDURE `createNewSession`(
    in inputIP varchar(15),
    in inputPostTime bigint,
    in inputPostInterval bigint,
    in inputPlatform varchar(45),
    out outSessionID int)
BEGIN
    insert into myDB.session (IP, StartTime, LastPost, Platform) 
        values (inputIP, inputPostTime - inputPostInterval, inputPostTime, inputPlatform);

    select LAST_INSERT_ID() into outSessionID;
END;$$

Теперь, если я передам правильные параметры (т. Е. Параметры, которые я протестировал в операторе вставки и которые работают правильно) и вызову следующее, я получу правильныеID back

CALL myDB.createNewSession('127.0.0.1', 1310062874228, 1310062894228, 'Platform', @outVar);
select LAST_INSERT_ID();

Однако, если я вызываю следующее, мне возвращается параметр BLOB со значением ?.

CALL myDB.createNewSession('127.0.0.1', 1310062874228, 1310062894228, 'Platform', @outVar);
select @outVar;

Почему это происходит?Эта хранимая процедура работала в течение месяца + на данный момент, и, насколько я знаю, ничего не изменилось в настройках БД.Зачем мне получать что-то кроме LAST_INSERT_ID() при выборе исходящего параметра из хранимой процедуры?

Любая помощь будет принята с благодарностью.Схожу с ума здесь ...

РЕДАКТИРОВАТЬ

Ошибка, которую я получаю при вызове хранимой процедуры верхнего уровня, заключается в следующем:

Error Code: 1264. Out of range value adjusted for column 'outSessionID' at row 68

РЕДАКТИРОВАТЬ 2

Вот структура таблицы

Field Type Null Key Extra
'SessionID', 'int(11)', 'NO', 'PRI', NULL, 'auto_increment'
'IP', 'varchar(15)', 'NO', '', NULL, ''
'StartTime', 'bigint(20)', 'NO', '', NULL, ''
'LastPost', 'bigint(20)', 'NO', '', NULL, ''
'Platform', 'varchar(45)', 'NO', '', NULL, ''

РЕДАКТИРОВАТЬ 3

Так после возниЯ обнаружил, что следующие запросы при вызове вместе также выбирают параметр BLOB со значением '?'

set @tempVar = 25;
select @tempVar;

Разве это не должно возвращать 25?

1 Ответ

0 голосов
/ 07 июля 2011

Пожалуйста, попробуйте

SET outSessionID := LAST_INSERT_ID();

в процедуре вместо выполнения SELECT.

...