「ハロウィンの運命」というアプリを作ってみたんだけど
MySQLのストアドプロシージャ記述でハマりました。
どこが間違っているのかどうしてもわからずにいろいろやってみたんだけど、
ずっとエラーが解消されない。大雑把に書くとかんなかんじ。
ちなみに、ひとつ目のSELECTとふたつ目のSELECTは対象のテーブルが違います。
最初のSELECTでパラメーターの確認をして、正しければ本来の処理を行なうという内容です。
delimiter // CREATE PROCEDURE fortune(OUT _s VARCHAR(2048), IN _u VARCHAR(128)) BEGIN IF (SELECT COUNT(*) FROM fortune_type WHERE name=_u) = 0 THEN SELECT '"type" パラメーターが間違っています' INTO _s; ELSE IF (SELECT COUNT(*) FROM fortune_name WHERE name=_u) = 1 THEN DELETE FROM fortune_saved WHERE name=_u; END IF; (中略) END IF; END; // delimiter ;
これを、ブロックごとに分けて登録してみるとすんなりOKになる。
どうも文法的には間違っていないっぽい。
IF文のネストがあったので、そこを字下げしてたんだけど
試しにと思って、インデントを削除してみたらすんなり入った。
IFの前にはインデントをつけたらいけないみたいです。
これだとOKになる。
delimiter // CREATE PROCEDURE fortune(OUT _s VARCHAR(2048), IN _u VARCHAR(128)) BEGIN IF (SELECT COUNT(*) FROM fortune_type WHERE name=_u) = 0 THEN SELECT '"type" パラメーターが間違っています' INTO _s; ELSE IF (SELECT COUNT(*) FROM fortune_name WHERE name=_u) = 1 THEN DELETE FROM fortune_saved WHERE name=_u; END IF; (中略) END IF; END; // delimiter ;