日期:2014-05-16  浏览次数:20816 次

Mysql动态sql出错
CREATE PROCEDURE usp_get_game_by_id(
 v_startRow int, 
 v_rowCount int,
 inout v_gameid int,  
 out v_name varchar(20),
 out v_url varchar(500),
 out v_imagePath varchar(100),
 out v_viewCount int,
 out v_count int,
 out v_categoryId int,
 out v_categoryName varchar(20)
)
begin
 declare v_sql_slc_comment varchar(400); 
 declare v_sql_slc_game_category varchar(400); 
 declare v_sql_slc_count varchar(400);
  set v_sql_slc_comment = 'select Id,Commenter,Content,CommentTime from t_comment where gameid=? order by CommentTime desc limit ?,?';  
  set v_sql_slc_game_category = 'select g.Id,g.Name,g.CategoryId,g.ViewCount,g.Url,g.ImagePath,c.CategoryName CategoryName 
  into ?,?,?,?,?,?,? from t_game g 
  join t_category c on g.CategoryId=c.Id where g.Id = ?';  
  set v_sql_slc_count = 'select count(1) into ? from t_comment where gameid=?';
  set @v_sql_slc_comment = v_sql_slc_comment;  
  set @v_sql_slc_game_category = v_sql_slc_game_category;  
  set @v_sql_slc_count = v_sql_slc_count;
  set @gameid = v_gameid;  
  set @name = v_name;  
  set @categoryId = v_categoryId;  
  set @viewCount = v_viewCount;  
  set @url = v_url;  
  set @imagePath = v_imagePath;  
  set @categoryName = v_categoryName;
  set @startRow = v_startRow-1;  
  set @rowCount = v_rowCount;
  prepare stmt_slc_comment from @v_sql_slc_comment;  
  prepare stmt_slc_game_category from @v_sql_slc_game_category;  
  prepare stmr_slc_count from @v_sql_slc_count;
  EXECUTE stmt_slc_comment using @gameid,@startRow,@rowCount;  
  EXECUTE stmt_slc_game_category using @gameid,@name,@categoryId,@viewCount,@url,@imagePath,@categoryName,@gameid;  
  EXECUTE stmr_slc_count using @viewCount,@gameid;
end;

出错信息:

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '?,?,?,?,?,?,? from t_game g 
  join t_category c' at line 2

------解决方案--------------------
你的代码执行并无错误!

mysql> delimiter //
mysql> CREATE PROCEDURE usp_get_game_by_id(
-> v_startRow int,
-> v_rowCount int,
-> inout v_gameid int,
-> out v_name varchar(20),
-> out v_url varchar(500),
-> out v_imagePath varchar(100),
-> out v_viewCount int,
-> out v_count int,
-> out v_categoryId int,
-> out v_categoryName varchar(20)
-> )
-> begin
-> declare v_sql_slc_comment varchar(400);
-> declare v_sql_slc_game_category varchar(400);
-> declare v_sql_slc_count varchar(400);
-> set v_sql_slc_comment = 'select Id,Commenter,Content,CommentTime from t
_comment where gameid=? order by CommentTime desc limit ?,?';
-> set v_sql_slc_game_category = 'select g.Id,g.Name,g.CategoryId,g.ViewCo
unt,g.Url,g.ImagePath,c.CategoryName CategoryName
'> into ?,?,?,?,?,?,? from t_game g
'> join t_category c on g.CategoryId=c.Id where g.Id = ?';
-> set v_sql_slc_count = 'select count(1) into ? from t_comment where game
id=?';
-> set @v_sql_slc_comment = v_sql_slc_comment;
-> set @v_sql_slc_game_category = v_sql_slc_game_category