1

私がここで正しいかどうかはわかりません。

MySQL にストアド プロシージャがあり、結果が次のように制限されます。

...
ORDER BY param_sort1, param_sort2
LIMIT param_start, param_end
;

*param_start* と *param_end* の両方が次のように整数として渡されます。

...
IN `param_start` INT, 
IN `param_end` INT
...

これは、最新の MySQL を使用する私の開発サーバーで動作していますが、実稼働サーバーはまだ MySQL 5.0.88 を実行しており、LIMIT 句で構文エラーをスローします。コメントアウトすると、正しく動作します。

私はMySQLにかなり慣れていないため、古いバージョンのMySQLでこれを正しく行う方法について完全に無知です。

質問:
これを機能させるためのヒントはありますか?

ありがとう!

4

2 に答える 2

2

MySQL5.0ではLIMIT引数に変数またはパラメーターを使用できません。この機能はMySQL5.5でサポートされていました。

回避策として-クエリ文字列を作成し、プリペアドステートメントを使用して実行します。


このようなもの(編集済み)

CREATE PROCEDURE procedure(IN param_start INT, IN param_end INT)
BEGIN
  SET @param_start = param_start;
  SET @param_end = param_end;
  SET @sql = CONCAT('SELECT * FROM table LIMIT ?, ?');
  PREPARE stmt FROM @sql;
  EXECUTE stmt USING @param_start, @param_end;
  DEALLOCATE PREPARE stmt;
END
于 2012-07-06T07:19:56.450 に答える
0

これは、v5.1.36 で動作するサンプル クエリです。

*制限 2000、1000 から *選択customer;*

v5.0.88 はもはや安定しておらず、MySQL は v5.0 ツリーのサポートを停止しているため、最新の MySQL 安定バージョンにアップグレードして試してください。v5.5 ツリーにアップグレードして、修正されているかどうかを確認してください。

これらのバグ レポートは関連している可能性があります http://bugs.mysql.com/bug.php?id=50510 http://bugs.mysql.com/bug.php?id=46217

于 2012-07-06T07:21:56.103 に答える