首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > Mysql >

MYSQL:Commands out of sync; you can't run this command now解决办法

2012-02-15 
MYSQL:Commands out of sync you cant run this command now昨天请高人帮忙改了个存储过程,也觉得代码已

MYSQL:Commands out of sync; you can't run this command now
昨天请高人帮忙改了个存储过程,也觉得代码已经没问题了,但跑起来总是提示这个错误,头都大了。

存储过程代码如下:

SQL code
 
-- --------------------------------------------
-- Routine DDL
-- --------------------------------------------
DELIMITER $$

CREATE DEFINER=`root`@`%` PROCEDURE `USP_CreateTrackerLogTable`(IN Pointer DATETIME,IN Counts INT)
begin
declare CountPointer int;
declare DateStringvarchar(20);
declare TableName varchar(50);
declare SQLTxt varchar(5000);
declare ExecuteSQL varchar(8000);
   
Set CountPointer = Counts;
   
Set SQLTxt = '
CREATE TABLE IF  NOT EXISTS Tracker_Log(
LogID bigint PRIMARY KEY  auto_increment NOT NULL,    /*自增ID*/
TrackerID varchar(50) NOT NULL,            /*日志ID*/
LogTime datetime NOT NULL,                /*日志时间*/
SessionId varchar(50) NOT NULL,                    /*会话ID*/
PassportID bigint NULL,                    /*账户ID*/
UserID bigint NULL,                    /*用户ID*/
ClientIP varchar(64) NULL,                    /*客户端IP*/
ServerIP varchar(64) NULL,                /*应用服务器IP*/
CurrentUrl varchar(255) NULL,                /*当前页链接*/
ReferrerUrl varchar(255) NULL,                /*前一页链接*/
ClickLinkUrl varchar(255) NULL,                /*超链接链接地址*/
ClickLinkTitle nvarchar(200) NULL,                /*超链接链接名*/
CurrentClientTime datetime NULL,                /*当前客户端时间*/
CurrentServerTime datetime NULL,                /*当前应用服务器时间*/
ClientServerTimeDif bigint Null,                    /*客户端与服务器时间差*/
ServerExecuteTime bigint NULL,                /*应用服务器执行请求时间*/
NetTransTime bigint NULL,                    /*网络传输时间*/
ServerResponseTime datetime NULL,            /*服务器输出时时间*/
ClientLoadTime bigint NULL,                /*客户端页面加载时间*/
UserDwellTime bigint NULL                    /*用户在当前页停留时间*/
);';

WHILE (CountPointer > 0) DO
        BEGIN
/*处理日期*/
            SET DateString = CONCAT(RIGHT(CAST(YEAR(Pointer) AS CHAR(4)), 2),'_',
            RIGHT('0' + CAST(MONTH(Pointer) AS CHAR(2)), 2),'_',
            RIGHT('0' + CAST(DAY(Pointer) AS CHAR(2)), 2));
             
Set TableName = 'Tracker_Log_' + DateString;

/*替换脚本字符串*/
Select ExecuteSQL = Replace(SQLTxt, 'Tracker_Log', TableName);

/*执行*/
            Select SQLTxt;
/*SET @asql=ExecuteSQL;
            PREPARE tt FROM @asql;
            EXECUTE tt;*/


/*print ExecuteSQL*/

/*准备下一次*/
Set CountPointer = CountPointer - 1;
SET Pointer = DATE_ADD(CURDATE(), INTERVAL CountPointer DAY );
END;
  END WHILE;
END




另外,我可能要在SQLTxt中放入创建多个表的代码,用于定时任务,不知道是否也行?
因为现在一个表我都跑不过去,多个表一起创建就没有测试,特请教大家。

[解决办法]
呵呵,你是怎样调用这个 SP的,运行环境是什么?语言+MYSQL?
[解决办法]
1、字符串合并:
Set TableName = CONCAT('Tracker_Log_' , DateString);

MYSQL中的字符串合并是用 CONCAT() 函数实现,当然也可以设置为 || 与ORACLE兼容。

2、赋值语句不能使用SELECT:
SET ExecuteSQL = Replace(SQLTxt, 'Tracker_Log', TableName);

需要改一下
select @var : = 123; 这种方式或者 set @var =123, select 123 into @var ;
[解决办法]
呵呵,自己解决更好, 分享一下经验

热点排行