MySQL用户定义的变量立即失去价值?

时间:2011-07-07 19:11:58

标签: mysql stored-procedures parameters

所以我遇到了一个让我疯狂的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;$$

现在,如果我传递了正确的参数(即:我针对insert语句测试的参数并且正常工作)并调用以下内容,我将获得正确的ID

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 :(得分:0)

请尝试

SET outSessionID := LAST_INSERT_ID();
在proc中而不是做SELECT。