これに関する問題:
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内の代入演算子に注意してください ステートメントは:=です (コロンは等しい) =だけではありません 。