2010-03-08 95 views
3

我有一个包含SELECT语句的SelectProc过程。我想添加一个过程参数LimitRowsCount并使用它如下:限制选定的行数MySQL中的存储过程参数

CREATE PROCEDURE SelectProc (IN LimitRowsCount INTEGER UNSIGNED) 
BEGIN 
    SELECT (...) 
    LIMIT LimitRowsCount; 
END 

但这种方法不起作用。

SELECT本身包含嵌套的子查询,所以我无法从它创建视图。有没有更好的方法,然后动态SQL(准备语句)?

回答

3
CREATE PROCEDURE SelectProc (IN LimitRowsCount INT) 
BEGIN 

SET @LimitRowsCount1=LimitRowsCount; 

PREPARE STMT FROM "SELECT (...) LIMIT ?"; 

EXECUTE STMT USING @LimitRowsCount1; 

END 
+0

http://forums.mysql.com/read.php?9869465,78682 – Babar 2010-06-28 10:14:41

2

从手册:

The LIMIT clause can be used to constrain the number of rows 
returned by the SELECT statement. LIMIT takes one or two numeric 
arguments, which must both be nonnegative integer constants 
(except when using prepared statements). 

MySQL Manual - 12.2.8. SELECT Syntax

所以这是一个没有 - 你不能。

+0

否意味着没有更好的办法?没有什么像LIMIT一样工作? – ssobczak 2010-03-09 11:15:20

+0

没有比使用预准备语句更容易的了。你可以选择你的数据到一个临时表中,按照规模进行修改,然后选择它 - 但是这比将预先限制条款嵌入预先准备好的语句要复杂得多。是否有任何特别的原因,您不想使用准备好的语句? – Martin 2010-03-09 11:41:22

+0

我不知何故只是不喜欢使用类似eval的函数。在这种情况下,我将不得不这样做。感谢帮助! – ssobczak 2010-03-10 11:31:49