所以我遇到了一个让我疯狂的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?
答案 0 :(得分:0)
请尝试
SET outSessionID := LAST_INSERT_ID();
在proc中而不是做SELECT。