2016-03-22 19 views
0

ストアドプロシージャを再作成しようとしています(本文を編集できないため)。私は、SHOWは、元のストアドプロシージャと同じ形式を使用するためには、CREATE PROCEDUREと呼ばれるが、私はそれを再作成しようとすると、私は次のエラーを取得:BEGINの後にMySQLストアドプロシージャ構文エラーが発生しました

ERROR 1064(42000):あなたは、あなたのSQL構文でエラーが発生しているが、あなたのMySQLサーバのバージョンに対応するマニュアルをチェックして正しい構文を調べてください。近くの '' at line 11

ERROR 1064(42000):SQL構文に誤りがあります。あなたのMySQLサーバのバージョンに対応するマニュアルをチェックし、正しい構文が1行目のDECLARE organization_id BIGINT(20)UNSIGNEDの近くで使用するようにしてください。

ERROR 1064(42000):SQL構文に誤りがあります。ライン1

で「DECLAREがUNSIGNED BIGINT(20)lobby_pod_id」近くで使用する権利構文についてはMySQLサーバのバージョンに対応するマニュアルをチェックすると、ここでは、コードです:

CREATE DEFINER=`lms`@`10.0.0.%` PROCEDURE `create_organization`(
    IN admin_username VARCHAR(255), 
    IN organization_name VARCHAR(100) 
) 
BEGIN 
    DECLARE admin_user_id BIGINT(20) UNSIGNED; 
    DECLARE organization_id BIGINT(20) UNSIGNED; 
    DECLARE lobby_pod_id BIGINT(20) UNSIGNED; 

    SELECT ID, account INTO admin_user_id, organization_id 
    FROM users 
    WHERE username = admin_username; 

    INSERT INTO pods (`title`, `description`, `owner`, `scene`) 
    VALUES (CONCAT(organization_name, " Village"), 
      CONCAT("General meeting space and hub for ", organization_name, " students and teachers."), 
      admin_user_id, 
      " Village" 
    ); 
END 

私はSQL Fiddleに貼り付けますMySQL Syntax Checkに貼り付けても、同じ結果が得られました。私はそれが簡単なミスだと確信していますが、それは私には明らかではありません。あなたは、ストアドプロシージャの定義の前と後にdelimiter定義が欠落している

答えて

0

:あなたはセミコロン文字を含む格納されたプログラムを定義するためのMySQLクライアントプログラムを使用する場合は

、問題が発生します。デフォルトでは、mysqlはセミコロンを文の区切り文字として認識します。したがって、mysqlが格納されたプログラム定義全体をサーバに渡すように、区切り文字を一時的に再定義する必要があります。

mysqlデリミタを再定義するには、delimiterコマンドを使用します。 [...]デリミタが//に変更され、 の定義全体が単一の文としてサーバに渡され、次に がリストアされます。プロシージャを呼び出す前にこれにより、 デリミタは、mysql自体によって解釈されるのではなく、 サーバに渡されるプロシージャの本体で使用されます。

保存されたprocの定義と本体が大丈夫だったので、構文chackはあなたに親指を与えましたが、コードはクライアントで正しく動作しませんでした。

は、ストアドプロシージャの定義については、以下のスケルトンを使用します

delimiter // 
create procedure ... 
... 
end 
// 
delimiter ; 
+0

それだった - 私はそれを動作させるためにあなたのスケルトンから変更唯一のことは、私は末尾落とした「区切り文字を;」 – Pecam

+0

あなたのセッションを通して//すべてのコマンドを終了させたいのでない限り、私はそれを元に戻します。私の答えが問題を解決するのに役立った場合、plsはそれを他の視聴者にあなたの質問が既に答えられたことを知らせるために受け入れたものとしてマークします。 – Shadow

+0

ああ - それは私のコマンドの残りの部分が終わらない理由を説明する(facepalm) – Pecam

関連する問題