1

Datagrip は、mysql で次の手順を完全に実行しますが、mysql コマンド ラインとワークベンチは、SQL に構文エラーがあると表示します。どうしてこれなの?

CREATE PROCEDURE addTag(n VARCHAR(255), d VARCHAR(255))
  BEGIN
    INSERT INTO Tags(name, description) VALUES
      (n, d);
  END;

mysql ワークベンチがそれを示す方法は次のとおりです。

mysql ワークベンチ エラーの下線

アクションとエラー出力を以下に再現します。

CREATE PROCEDURE addTag(n VARCHAR(255), d VARCHAR(255)) BEGIN INSERT INTO Tags(name, description) VALUES (n, d)

エラー コード: 1064。SQL 構文にエラーがあります。4行目のnear ''を使用する正しい構文については、MySQLサーバーのバージョンに対応するマニュアルを確認してください

4

1 に答える 1

1

通常の SQL エディターでクエリを作成する場合、ステートメントを互いに分離する方法が必要です。これは、いわゆるデリミタによって行われます。デフォルトの区切り文字はセミコロン (変更可能) です。

ただし、MySQL サーバーは、ストアド プログラム (ストアド プロシージャ、関数、イベントなど) 内のステートメントを区切るためにセミコロンも使用します。サーバーは一度に 1 つのステートメントしか処理できないため、クライアントはスクリプトを個々のステートメントに分割する必要があります。これは、前述の区切り文字を使用して行われます。

ここで、ストアド プログラムを作成すると、クライアントがサーバーのステートメントを分割するために使用する区切り文字と、それらのストアド プログラム内の区切り文字 (どちらもセミコロン) が競合します。これを避けるために、クライアント区切り文字をクエリに表示されない別のものに変更できます (文字列 + コメントはカウントされません)。したがって、すべての (My)SQL ツールで、この問題を回避するためにこの区切り記号を変更することができます。

ただし、MySQL Workbench には、オブジェクト エディタによる支援があります。データベース内のオブジェクト タイプごとに、そのオブジェクトの管理に特化したオブジェクト エディタがあります。ストアド プロシージャ/関数の場合、create procedureまたはcreate functionブロックのみを許可するエディターがあるため、(クライアント) 区切り記号は必要ありません。

于 2016-05-19T06:38:49.723 に答える