请教一个关于mysql存储过程的问题!!

BeyondQqiang 2012-12-28 03:11:46
直接看代码:

#一个可以指定取出几条语句的存储过程
delimiter $$
drop procedure if EXISTS LimitNum $$
create procedure LimitNum( in p_start int,in p_end int,in table_name varchar(255) )
begin
set @tmp_sql = concat( 'select * from ',table_name,' limit ?,?' );
prepare ycl from @tmp_sql;
set @pb = p_start;
set @pe = p_end;
execute ycl using @pb,@pe;
deallocate prepare ycl;
end $$
delimiter ;
call LimitNum(1,5,'x');

但是这里有个问题,如下:
set @tmp_sql = concat( 'select * from ',table_name,' limit ?,?' );
这个更改为:
declare tmp_sql varchar(255);
set tem_sql = concat( 'select * from ',table_name,' limit ?,?' );
再执行就会报错, declare 为定义局部变量 ,这样做的时候就会报错,请问为什么呀???
...全文
90 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
BeyondQqiang 2012-12-29
  • 打赏
  • 举报
回复
引用 2 楼 ACMAIN_CHM 的回复:
prepare 后面使用的必须是SESSION级以上的变量,不能使用存储过程中的局部变量。
嗯嗯 懂了,谢谢版主大人O(∩_∩)O哈!
ACMAIN_CHM 2012-12-28
  • 打赏
  • 举报
回复
prepare 后面使用的必须是SESSION级以上的变量,不能使用存储过程中的局部变量。
wwwwb 2012-12-28
  • 打赏
  • 举报
回复
set tem_sql = concat( 'select * from ',table_name,' limit ?,?' ); set @asql=tem_sql; prepare ycl from @asql; ....

56,678

社区成员

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

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