【发布时间】:2011-07-07 19:11:58
【问题描述】:
所以我遇到了一个即将让我发疯的 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
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 吗?
【问题讨论】:
-
你在使用msql工作台吗?
-
是的,我正在使用 MySQL 工作台。不管我从哪里点击数据库,都会发生错误。
-
好的,只是出于好奇,它在数据查看器中的外观如何? (如果您右键单击该字段)
-
是的,参数是相同的。这是为了表明问题在于将 LAST_INSERT_ID() 分配给出站参数不起作用。至于数据在数据查看器中的外观,单元格中有一个显示“BLOB”的框,当我将字段内容复制并粘贴时,我会收到一个“?”
标签: mysql stored-procedures parameters