MySQL - 存储过程限制问题

Posted

技术标签:

【中文标题】MySQL - 存储过程限制问题【英文标题】:MySQL - Stored Procedure limit issue 【发布时间】:2011-06-16 10:53:52 【问题描述】:

我在mysql的SQLYog中写了一个存储过程如下,

分隔符 $$

如果存在则删除程序 test.spUser$$

创建过程test.spUser(IN start1 INT,IN 限制1 INT)

BEGIN

select gi.id,gi.user_id,concat(concat(first_name,' '),last_name) as full_name from generic as gi, profile as p where gi.user_id=p.user_id limit start1,limit1;

END$$

分隔符;

如果我写了上面的代码,那么它会抛出错误号。 1064,如果我将limit start1,limit1替换为limit 5,10,那么它运行正常。

我该如何解决这个问题?

【问题讨论】:

【参考方案1】:
drop procedure if exists list_users;

delimiter #

create procedure list_users()
begin
  set SQL_SELECT_LIMIT = 1;

  select * from users;

  set SQL_SELECT_LIMIT = DEFAULT;
end#

delimiter ;


select * from users;

+---------+----------+
| user_id | username |
+---------+----------+
|       3 | alpha    |
|       2 | bar      |
|       4 | beta     |
|       1 | f00      |
+---------+----------+
4 rows in set (0.00 sec)


call list_users();

+---------+----------+
| user_id | username |
+---------+----------+
|       3 | alpha    |
+---------+----------+
1 row in set (0.00 sec)

【讨论】:

SQL_SELECT_LIMIT 这个变量定义了 LIMIT。但是记录的起点呢? @Ozz 给我一个大图 - 你想做什么 - 分页?

以上是关于MySQL - 存储过程限制问题的主要内容,如果未能解决你的问题,请参考以下文章

mysql 与oracle中的存储过程及函数有啥区别,尽可能详细哦

MySQL存储过程与函数,我啥时候使用?

MySQL存储过程与函数,我啥时候使用?

MySQL存储过程与函数,我啥时候使用?

Mysql-存储过程

MySQL5-函数/存储过程与定时器触发器