イライラする MySQL CREATE PROCEDURE エラー
-
11-09-2019 - |
質問
これが迅速に解決されることを願っています。
これが私の .sql ファイルです。
USE my_db;
DELIMITER $$
CREATE PROCEDURE searchLocation(IN argQuery VARCHAR(32), IN argLimit INT)
BEGIN
SELECT DISTINCT `suburb`, `postcode`
FROM `location`
WHERE `suburb` LIKE '%argQuery%'
OR `postcode` LIKE 'argQuery%'
LIMIT argLimit
;
END
$$
DELIMITER ;
これが出力です:
ERROR 1064 (42000) at line 4: 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 'argLimit
;
END' at line 8
したがって、パラメータ argLimit が気に入らないようですが、その理由はわかりません。私は何か愚かなことをしているに違いありません。
MySQL 5.0.51を使用しています。
ありがとう。
解決
LIMIT
は定数である必要があり、MySQL のプロシージャまたは関数内でパラメータ化することはできません。ただし、次の方法を使用してこの問題を回避することができます。 PREPARE ... EXECUTE ... USING
構文。
最終的には次のようになります。
...
SET @qry= argQuery;
SET @lmt= argLimit;
PREPARE stmt FROM 'SELECT ... LIKE ? ... LIKE ? ... LIMIT ?';
EXECUTE stmt USING @qry, @qry, @lmt;
DEALLOCATE PREPARE stmt;
他のヒント
マルク・Grueのコメントするへの直接リンク。
このに行うためのトリック: コメントのテーブルIDを取得し、URLにアンカーを作成します。
所属していません StackOverflow