MPX*_*MPX 40 mysql variables clause limit
我正在编写一个存储过程,其中有一个名为my_size的输入参数,它是一个INTEGER.我希望能够LIMIT在SELECT声明中的子句中使用它.显然这是不支持的,有没有办法解决这个问题?
# I want something like:
SELECT * FROM some_table LIMIT my_size;
# Instead of hardcoding a permanent limit:
SELECT * FROM some_table LIMIT 100;
Run Code Online (Sandbox Code Playgroud)
ENa*_*git 22
对于那些不能使用MySQL 5.5.6+并且不想编写存储过程的人,还有另一种变体.我们可以使用ROWNUM在subselect上添加where子句.
SET @limit = 10;
SELECT * FROM (
SELECT instances.*,
@rownum := @rownum + 1 AS rank
FROM instances,
(SELECT @rownum := 0) r
) d WHERE rank < @limit;
Run Code Online (Sandbox Code Playgroud)
Pra*_*aya 14
存储过程
DELIMITER $
create PROCEDURE get_users(page_from INT, page_size INT)
begin
SET @_page_from = page_from;
SET @_page_size = page_size;
PREPARE stmt FROM "select u.user_id, u.firstname, u.lastname from users u limit ?, ?;";
EXECUTE stmt USING @_page_from, @_page_size;
DEALLOCATE PREPARE stmt;
end$
DELIMITER ;
Run Code Online (Sandbox Code Playgroud)
用法
call get_users(1, 10);
Run Code Online (Sandbox Code Playgroud)
use*_*112 13
我知道这个答案来得晚,但请尝试SQL_SELECT_LIMIT.
例:
Declare rowCount int;
Set rowCount = 100;
Set SQL_SELECT_LIMIT = rowCount;
Select blah blah
Set SQL_SELECT_LIMIT = Default;
Run Code Online (Sandbox Code Playgroud)
The*_*edi 10
搜索出现在这篇文章中.我已粘贴下面的相关文字.
这是一个论坛帖子,显示了一个准备好的语句示例,允许您为limit子句分配变量值:
http://forums.mysql.com/read.php?98,126379,133966#msg-133966
但是,我认为这个bug应该得到一些关注,因为我无法想象一个过程中的预处理语句将允许任何过程 - 编译时优化.我感觉准备好的语句是在程序的运行时编译和执行的,这会对效率产生负面影响.如果limit子句可以接受正常的过程变量(例如,过程参数),那么数据库仍然可以在过程中对查询的其余部分执行编译时优化.这可能会更快地执行该过程.我不是专家.
| 归档时间: |
|
| 查看次数: |
53419 次 |
| 最近记录: |