1

MySQL5.5MySQLWorkbench5.2.34 CEをインストールして、コンピューター上にデータベースを作成しました。次に、 MySQL5.0がインストールされている別のコンピューターにデータベースを移行します。(スキーマを移行する必要があります。データは必要ありません)

MySQLWorkbenchの[ファイル]->[エクスポート]->[ForwardEngineer SQL CREATEスクリプト]を使用してdb.sqlスクリプトを生成し、それを他のコンピューターにコピーします。

mysql <db.sqlと入力してデータベースを作成しますが、エラーが発生するだけです。

ここでエラーが発生します:

DELIMITER $$

CREATE PROCEDURE `filedb`.`GetIncompleteFileId` (in latestFileId BIGINT UNSIGNED, in serverBits BIT(32), in fileCount SMALLINT UNSIGNED)

BEGIN
    SELECT `id`, `key`, `length`, `path`
    FROM
    (
        SELECT * FROM `filedb`.`fileInfo` WHERE `id` <= latestFileId
    ) AS TempTable
    WHERE (serverBits & `serverownership` NOT IN (serverBits, 0))
    ORDER BY `id` DESC
    LIMIT fileCount;
END

$$

エラーは'fileCountの近くにあります。終わり'。「LIMITfileCount」を削除すると、エラーは消えます。

誰かが私に何が問題なのか教えてくれますか?

4

1 に答える 1

4

MySQL 5.0では、LIMIT引数は、変数やプロシージャパラメータではなく、非負の整数定数である必要があります。このエラーを回避するには、プリペアドステートメントを使用してください。

MySQL5.0のドキュメントから-

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

MySQL5.5のドキュメントから-

LIMIT句を使用して、SELECTステートメントによって返される行数を制限できます。LIMITは、次の例外を除いて、1つまたは2つの数値引数を取ります。これらは両方とも非負の整数定数でなければなりません。

プリペアドステートメント内で、LIMITパラメーターは?を使用して指定できます。プレースホルダーマーカー。

ストアドプログラム内では、MySQL 5.5.6以降、整数値のルーチンパラメータまたはローカル変数を使用してLIMITパラメータを指定できます。

于 2012-06-21T09:31:56.687 に答える