0

Mysqlで以下の手順を実行しています。

DROP procedure IF EXISTS `wm_batch_list`;

DELIMITER $$

/*!50003 SET @TEMP_SQL_MODE=@@SQL_MODE, SQL_MODE='STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION' */ $$
CREATE DEFINER=`root`@`localhost` procedure `wm_batch_list`(IN p_start int(11),IN p_range int(11))
BEGIN
select * from batch ORDER BY start_year DESC limit p_start,p_range;
END $$
/*!50003 SET SESSION SQL_MODE=@TEMP_SQL_MODE */  $$

DELIMITER ;

しかし、私はこのエラーが発生しています:

Error code 1064, SQL state 42000: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'p_start,p_range;
END' at line 3

私がどこで間違いを犯しているのか教えてください。

4

1 に答える 1

1

少しグーグルで調べてみると、LIMIT をパラメーターとして MySQL sproc に渡すときに、あなたに関連する質問が見つかりました。

http://dev.mysql.com/doc/refman/5.1/en/select.htmlから:

LIMIT 句を使用して、SELECT ステートメントによって返される行数を制限できます。LIMIT は 1 つまたは 2 つの数値引数を取り、両方とも非負の整数定数でなければなりません (準備済みステートメントを使用する場合を除く)。

したがって、それを解決する方法は、準備ステートメントを使用することです

SET @skip=p_start;
SET @rows=p_range;

PREPARE STMT FROM 'SELECT * FROM table LIMIT ?, ?';
EXECUTE STMT USING @skip, @rows;
于 2012-07-28T17:36:45.580 に答える