2010-03-08 66 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