GoDaddy の phyMyAdmin 経由で MySQL を使用しています。このステートメントを実行すると、1 つの整数値が問題なく返されます。
SELECT DISTINCT `runNumber` FROM RideSlot WHERE (timeRange = 2) LIMIT 0,1;
ただし、次のストアド プロシージャを作成しようとすると、次のエラーが発生します。
1064 - SQL 構文にエラーがあります。25 行目の「near ''」を使用する正しい構文については、MySQL サーバーのバージョンに対応するマニュアルを確認してください。
DROP PROCEDURE IF EXISTS `spGetPreferredRunNumbers`$$
CREATE PROCEDURE `spGetPreferredRunNumbers`(IN prefTimeRange INT(4), INOUT run1 INT(4), INOUT run2 INT(4), INOUT run3 INT(4), INOUT run4 INT(4), INOUT run5 INT(4))
BEGIN
IF (prefTimeRange = 2) THEN BEGIN
SELECT DISTINCT `runNumber` FROM RideSlot WHERE (timeRange = prefTimeRange) LIMIT 0,1 INTO run1;
SELECT DISTINCT `runNumber` FROM RideSlot WHERE (timeRange = prefTimeRange) LIMIT 1,1 INTO run2;
SELECT DISTINCT `runNumber` FROM RideSlot WHERE (timeRange = prefTimeRange) LIMIT 2,1 INTO run3;
SELECT DISTINCT `runNumber` FROM RideSlot WHERE (timeRange = prefTimeRange) LIMIT 3,1 INTO run4;
SET run5 = -1;
END;
ELSE IF (prefTimeRange = 3) THEN BEGIN
SELECT DISTINCT `runNumber` FROM RideSlot WHERE (timeRange = prefTimeRange) LIMIT 0,1 INTO run1;
SELECT DISTINCT `runNumber` FROM RideSlot WHERE (timeRange = prefTimeRange) LIMIT 1,1 INTO run2;
SELECT DISTINCT `runNumber` FROM RideSlot WHERE (timeRange = prefTimeRange) LIMIT 2,1 INTO run3;
SELECT DISTINCT `runNumber` FROM RideSlot WHERE (timeRange = prefTimeRange) LIMIT 3,1 INTO run4;
SET run5 = -1;
END;
ELSE BEGIN
SELECT DISTINCT `runNumber` FROM RideSlot WHERE (timeRange = prefTimeRange) LIMIT 0,1 INTO run1;
SELECT DISTINCT `runNumber` FROM RideSlot WHERE (timeRange = prefTimeRange) LIMIT 1,1 INTO run2;
SELECT DISTINCT `runNumber` FROM RideSlot WHERE (timeRange = prefTimeRange) LIMIT 2,1 INTO run3;
SELECT DISTINCT `runNumber` FROM RideSlot WHERE (timeRange = prefTimeRange) LIMIT 3,1 INTO run4;
SELECT DISTINCT `runNumber` FROM RideSlot WHERE (timeRange = prefTimeRange) LIMIT 4,1 INTO run5;
END;
END IF;
END$$
DELIMITER;
はい、制限が異なる他の select ステートメントを個別にテストしましたが、LIMIT 4,1 を選択するときに prefTimeRange に 2 または 3 を使用する場合を除いて、それらも正常に動作します。prefTimeRange の 2 と 3 は 4 つの結果しか返さないため、prefTimeRange が 2 または 3 の場合は run5 に -1 を割り当てます。
これを行うかどうかに関係なく、まったく同じエラーが発生します:prefTimeRange = 3
またはこれ: prefTimeRange = "3"
はい、正しい区切り文字は $$ であることを phpMyAdmin に伝えることを覚えています。
何が欠けていますか????