これに関する問題:
DELIMITER $$
DROP PROCEDURE IF EXISTS my_test;
CREATE PROCEDURE my_test() ...
MySQLがDROP PROCEDURE
の最後にセミコロンを表示していないということです ステートメントの終わりとしてのステートメント行。これは、前の行で、ステートメントターミネータがセミコロン以外のものであるとMySQLに通知されたためです。あなたはMySQLにステートメントが2つのドル記号で終了するだろうと言いました。したがって、MySQLはDROP PROCEDURE
を読み取っています。 行、ステートメントターミネータを探します。また、読み取るBLOB全体は有効なMySQLステートメントではなく、構文エラーを生成します。
修正:DROP PROCEDURE
を移動する 前の行 DELIMITER $$
ライン;または、DROP PROCEDURE
を終了します セミコロンではなく指定された区切り文字を含むステートメント。
報告する2番目の問題は、構文エラーです。これは、MySQLが IF
を認識しないために発生しています。 有効なSQLステートメントの先頭として。
IF
ステートメントはのみ有効です MySQLストアドプログラムのコンテキスト内(たとえば、CREATE PROCEDURE
内 ステートメント。)
修正:IF
を使用する MySQLストアドプログラムのコンテキスト内でのみステートメント。
報告する3番目の問題も構文エラーです。これは、SET
の有効な構文がないために発生しています。 声明; SET
のMySQL構文 ユーザー変数に値を割り当てるステートメントは次のとおりです。
SET @uservar = expr
MySQLは式を期待しています 等号の後。 MySQLはではありません SQLステートメントが必要です。
SELECT
の結果としてユーザー変数に値を割り当てるには ステートメントの場合、SELECTステートメント内で割り当てを行います。例:
SELECT @Count := Count(id) FROM `tbl_object_users` WHERE `username`='jp2code'
SELECT
内の代入演算子に注意してください ステートメントは:=
です (コロンは等しい) =
だけではありません 。