MySql存储过程问题

web_show 2010-04-19 02:54:02

Create PROCEDURE USP_CreateLogTables(in Pointer datetime,in Counts int)
begin
declare CountPointer int
declare DateString varchar(20)
declare TableName varchar(50)
declare ExecuteSQL varchar(50)
declare SQLTxt varchar(max)

Set CountPointer = Counts

Set SQLTxt=' CREATE TABLE dbo.Tracker_Log(
LogID bigint PRIMARY KEY auto_increment NOT NULL,
TrackerID varchar(50) NOT NULL,
LogTime datetime NOT NULL,
SessionId varchar(50) NOT NULL,
PassportID bigint NULL,
UserID bigint NULL,
ClientIP varchar(64) NULL,
ServerIP varchar(64) NULL,
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)
Begin
Set DateString = Right(Cast(DateName(yyyy, Pointer) as varchar(4)), 2) + '_' +
Right('0' + Cast(Month(Pointer) as varchar(2)), 2) + '_' +
Right('0' + Cast(DatePart(day, Pointer) as varchar(2)), 2)

Set TableName = 'Tracker_Log_' + DateString

Select ExecuteSQL = Replace(SQLTxt, 'Tracker_Log', TableName)

execute(ExecuteSQL)

Set CountPointer = CountPointer - 1
Set Pointer = DateAdd(dd, CountPointer, getDate())
End

END


无论我怎么改,IDE都提示存在错误
我的MYSQL版本为5.0.67
之前是MSSQL的存储过程,今天刚接触MYSQL,死活调不通,还请大家指点。
...全文
43 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
wwwwb 2010-04-19
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 web_show 的回复:]
太谢谢了,我方IDE中测试没报错,应该是通过了,差别太大了
[/Quote]
呵呵,没有数据测试,自行再修改一下
ACMAIN_CHM 2010-04-19
  • 打赏
  • 举报
回复
MySQL 和SQL SERVE有很多差别。

字符串合并不是用+号是用 concat 函数。
web_show 2010-04-19
  • 打赏
  • 举报
回复
太谢谢了,我方IDE中测试没报错,应该是通过了,差别太大了
wwwwb 2010-04-19
  • 打赏
  • 举报
回复
改动比较多,自行修改一下,上述代码供你参考
wwwwb 2010-04-19
  • 打赏
  • 举报
回复
DELIMITER $$

CREATE PROCEDURE USP_CreateLogTables(IN Pointer DATETIME,IN Counts INT)
BEGIN
DECLARE CountPointer INT;
DECLARE DateString VARCHAR(20);
DECLARE TableName VARCHAR(50);
DECLARE ExecuteSQL VARCHAR(50);
DECLARE SQLTxt VARCHAR(5000);

SET CountPointer = Counts;

SET SQLTxt=' CREATE TABLE dbo.Tracker_Log(
LogID bigint PRIMARY KEY auto_increment NOT NULL,
TrackerID varchar(50) NOT NULL,
LogTime datetime NOT NULL,
SessionId varchar(50) NOT NULL,
PassportID bigint NULL,
UserID bigint NULL,
ClientIP varchar(64) NULL,
ServerIP varchar(64) NULL,
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 = CONCAT('Tracker_Log_' ,DateString);

SELECT ExecuteSQL = REPLACE(SQLTxt, 'Tracker_Log', TableName);

SET @asql=ExecuteSQL;
PREPARE tt FROM @asql;
EXECUTE tt;

SET CountPointer=CountPointer - 1;
SET Pointer = DATE_ADD(CURDATE(), INTERVAL CountPointer DAY );
END;
END WHILE;

END
$$

DELIMITER ;
fobcclkm 2010-04-19
  • 打赏
  • 举报
回复
语句后面怎么没有结束符号啊“;”

while 需要 end while 来结束!

WHILE i < count DO

......
END WHILE;

wwwwb 2010-04-19
  • 打赏
  • 举报
回复
最好在执行前
Select ExecuteSQL
看看语句是否正确
wwwwb 2010-04-19
  • 打赏
  • 举报
回复
假设你的SQL语句正确
execute(ExecuteSQL)->
set @asql=ExecuteSQL;
prepre tt from @asql;
execute tt;

56,677

社区成员

发帖
与我相关
我的任务
社区描述
MySQL相关内容讨论专区
社区管理员
  • MySQL
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧