こんにちは私はsprocで「オプション」パラメータを使用しようとしていますが、MYSQLでは許可されていないことを理解していますが、それがnullの場合。しかし、私は構文が間違っていると思うが、私は区切り文字で何かを疑うが、なぜそれが間違っているのか分からない。私はあまり思わSQLサーバ、とはるかによく知っておくnull可能なパラメータを持つMYSQLストアドプロシージャがnullの場合に設定される
謝罪 'Queryが空だった':
DELIMITER ;;
CREATE DEFINER=`root`@`localhost`
PROCEDURE `addSensorReading`(
_temp DECIMAL(5,2),
_mois DECIMAL(5,2),
sourceName varchar(15),
_ambTemp DECIMAL(5,2),
_ambMois DECIMAL(5,2)
)
BEGIN
/*we only get ambient readings from the api every 2 hours (that's how often it updates), so for ease of UI and readability we assume it has not changed as there is no more recent reading. So we get the latest reading with an ambient value if we don't have one provided. */
INSERT INTO Reading (moisValue, tempValue, sourceName, ambTempValue, ambMoisValue)
SELECT _mois, _temp, sourceName, IFNULL(_ambTemp, r1.ambTempValue), IFNULL(_ambMois, r2.ambMoisValue)
FROM (SELECT ambTempValue
FROM Reading
WHERE ambTempValue IS NOT NULL
ORDER BY creation_time DESC
LIMIT 1) AS r1
CROSS JOIN
(SELECT ambMoisValue
FROM Reading
WHERE ambTempValue IS NOT NULL
ORDER BY creation_time DESC
LIMIT 1) AS r2
END;
DELIMITER ;
エラーが発生:
DELIMITER ;;
CREATE DEFINER=`root`@`localhost`
PROCEDURE `addSensorReading`(
_temp DECIMAL(5,2),
_mois DECIMAL(5,2),
sourceName varchar(15),
_ambTemp DECIMAL(5,2),
_ambMois DECIMAL(5,2)
)
IF (_ambTemp IS NULL) THEN
SET _ambTemp := ( SELECT r.ambTempValue
FROM Readings r
WHERE r.ambTempValue IS NOT NULL
ORDER BY r.creation_time DESC
LIMIT 1);
END IF;
IF (_ambMois IS NULL) THEN
SET _ambMois := ( SELECT r.ambMoisValue
FROM Readings r
WHERE r.ambMoisValue IS NOT NULL
ORDER BY r.creation_time DESC
LIMIT 1);
END IF;
INSERT INTO reading (moisValue, tempValue, sourceName, ambTempValue, ambMoisValue)
VALUES (_mois, _temp, sourceName, _ambTemp, _ambMois);;
DELIMITER ;
Barmarは答えを与えましたローカル変数や一般的なspocsでより熟達しています。 ありがとう
このような質問をするときは、常にFULLエラーメッセージを投稿してください。 – symcbean
これを実行すると、「クエリが空です」というエラーが表示されます しかし、両方のサブ選択が値を返しますか? –
プロシージャの定義には何を使用していますか? MySQL Workbench、PhpMyAdmin、 'mysql' CLI?取得しているエラーメッセージは、プロシージャを作成しようとしているときに空のクエリをMySQLに送信していることを示しています。 – Barmar