2017-07-14 16 views
0

MySQL Workbenchバージョン6.3でストアドプロシージャを作成しようとしています。
私の手続きコードの3行目にセミコロンがないと警告が出ますが、そこにはあります。MySQLワークベンチでセミコロンが見つからないのはなぜですか?

これは私が得る応答である:

エラーコード:1064あなたは、あなたのSQL構文でエラーが発生しています。何が起こったかのライン3

で「」の近くに使用する権利 構文についてはMySQLサーバのバージョンに対応 マニュアルを確認してください?

CREATE PROCEDURE MigrateDescription() 
BEGIN 
    DECLARE counter int; 
    DECLARE abhid varchar(20); 
    DECLARE text_d varchar(50); 
    DECLARE text_e varchar(50); 
    DECLARE curs CURSOR FOR SELECT `abhaengigkeit`.`AbhId`, `abhaengigkeit`.`Text_D`, `abhaengigkeit`.`Text_E` FROM `p16altdatentest`.`abhaengigkeit`; 
    OPEN curs; 

    REPEAT 
     FETCH curs INTO abhid, text_d, text_e; 

     INSERT INTO `paragraph16`.`description` 
      (`languageId`,`textKey`,`text`,`isDeleted`,`changedBy`,`changeDate`) 
      VALUES 
      (1, CONCAT('Dependancy_', REPLACE(abhid, '_', '')), text_d, 0, NULL, CURRENT_TIMESTAMP); 
     INSERT INTO `paragraph16`.`description` 
      (`languageId`,`textKey`,`text`,`isDeleted`,`changedBy`,`changeDate`) 
      VALUES 
      (2, CONCAT('Dependancy_', REPLACE(abhid, '_', '')), text_e, 0, NULL, CURRENT_TIMESTAMP); 
    END REPEAT 
END 
+0

試してみてください。DECLARE counter int(11); ' – EvgenyKolyakov

+0

あなたがコードを実行すると、MySQLサーバーはエラーを報告しますか? – axiac

+0

** _ @ OP _ **:WBで_exactエラースタックを投稿する方が良い –

答えて

2

MySQL Workbenchはコードをそのままサーバに送信します。

MySQLは文の区切り文字として;を使用します。 3行目で;が出現すると、CREATE PROCEDUREで始まる文が終了し、それに続く他の多くの文が続くと考えられます。投稿したコードの最初の3行は、間違いなく有効なCREATE PROCEDUREステートメントです。

BEGIN..END compound statementの本文に;を使用するには、文の区切り文字を別の文字または文字列に一時的に変更する必要があります。

文の区切り文字を変更するコマンドは、DELIMITERで、その後に新しい区切り文字を使用します。現在のデリミタを使用して終了する必要はありません。それだけで十分です。

DELIMITERを2回呼び出し(新しいものを設定し、その後、区切り文字として;を復元するために)にコードを囲みます。これは、ルーチン、トリガーや含む他のステートメントを作成する標準的なMySQLの方法です

DELIMITER // 
CREATE PROCEDURE MigrateDescription() 
BEGIN 
    -- The content of your procedure here, using ; as statement delimiter 
END 
//    -- This is where the CREATE PROCEDURE statement ends 
DELIMITER ; -- Restore the default delimiter 

compound statements。ルーチン本体またはトリガー本体に文が1つのみ含まれている場合は不要です(;は内部にありません)。

関連する問題