Commands out of sync, you can't run this command now
场景:MYSQL:Commands out of sync; you can't run this command now解决办法
MYSQL:Commands out of sync; you can't run this command now
昨天请高人帮忙改了个存储过程,也觉得代码已经没问题了,但跑起来总是提示这个错误,头都大了。
存储过程代码如下:
另外,我可能要在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 ;
------解决方案--------------------
呵呵,自己解决更好, 分享一下经验
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 DateString varchar(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 ;
------解决方案--------------------
呵呵,自己解决更好, 分享一下经验