create procedure proc_track_by_bundleid(in startTime int,in endTime int)
begin
DECLARE track_startTime int;
DECLARE track_endTime int;
DECLARE tablename varchar(1000);
set track_startTime = startTime - 8*3600;
set track_endTime = endTime - 8*3600;
set tablename = concat('track_',FROM_UNIXTIME(startTime,'%Y%m'));
set @sqlcmd = concat('insert into rp_track_by_bundleid ( `BundleID` , `Method` , `Number` , `StartTime`, `EndTime`) SELECT `app_bundle_id`,`method`,count(*),startTime ,endTime  FROM report_trackdb.',tablename,' WHERE  UNIX_TIMESTAMP( req_time ) >= track_startTime and UNIX_TIMESTAMP( req_time ) <= track_endTime group by `app_bundle_id`,`method`');
PREPARE STMT FROM @sqlcmd;
EXECUTE STMT;  
DEALLOCATE PREPARE stmt; 
end//
上面的语句中的 @sqlcmd变量  
我如果先声明DECLARE sqlcmd varchar(1000);
然后用set sqlcmd = concat(....);
就会报错但是不用声明sqlcmd变量
直接set @sqlcmd = concat(....);
就可以成功
有谁能告诉我是为什么呢……