как использовать лимит с входом из процедуры - PullRequest
0 голосов
/ 10 июля 2011

Я хочу использовать pollNo в пределе, но получаю ошибку:

ошибка: строка сценария: 4 У вас есть ошибка в вашем синтаксисе SQL; проверить руководство, которое соответствует вашему MySQL версия сервера для правильного синтаксиса использовать около 'pollNo, 1) как объединение poll_data для A.id = poll_data.poll_id;

END 'в строке 6

DELIMITER $$

DROP PROCEDURE IF EXISTS `prj`.`ret_poll` $$
CREATE PROCEDURE `prj`.`ret_poll` (IN pollNo int)
BEGIN
select * from
(select * from poll limit pollNo,1 )as A
JOIN poll_data
on A.id=poll_data.poll_id;

END $$

DELIMITER ;

Ответы [ 2 ]

2 голосов
/ 10 июля 2011

Какую версию MySQL вы используете?Я думаю, что это исправлено в 5.5 и более поздних версиях, но предыдущие версии нуждаются в обходном пути, так как им нужны целочисленные константы или подготовленные операторы.

Итак, до 5.5 вы должны иметь возможность сделать что-то вроде следующего:

DELIMITER $$

DROP PROCEDURE IF EXISTS `prj`.`ret_poll` $$
CREATE PROCEDURE `prj`.`ret_poll` (IN pollNo int)
BEGIN
PREPARE STMT FROM "select * from (select * from poll limit ?,1 ) as A join poll_data on A.id=poll_data.poll_id";
SET @start = pollNo;

EXECUTE STMT USING @start;

END $$

DELIMITER ;

Подробнее об этом можно прочитать здесь: http://bugs.mysql.com/bug.php?id=11918

1 голос
/ 10 июля 2011

LIMIT требует целое число в качестве ввода, а не имя столбца.Чтобы сделать то, о чем вы говорите, необходимы динамические запросы.

Вот сообщение на форуме , в котором говорится о выполнении динамического SQL в MySQL.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...