Ограничение числа выбранных строк параметром хранимой процедуры в MySQL - PullRequest
3 голосов
/ 08 марта 2010

У меня есть процедура SelectProc, которая содержит инструкцию SELECT. Я хочу добавить параметр процедуры LimitRowsCount и использовать его следующим образом:

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

но этот подход не работает.

Сам SELECT содержит вложенные подзапросы, поэтому я не могу создать представление из него. Есть ли способ лучше, чем динамический SQL (подготовленные операторы)?

Ответы [ 2 ]

3 голосов
/ 28 июня 2010
CREATE PROCEDURE SelectProc (IN LimitRowsCount INT) 
BEGIN

SET @LimitRowsCount1=LimitRowsCount; 

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

EXECUTE STMT USING @LimitRowsCount1; 

END
2 голосов
/ 08 марта 2010

Из руководства:

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. ВЫБЕРИТЕ Синтаксис

Так что нет - вы не можете.

...