組み込みのプロシージャエディタを使用する場合、MySQLWorkbenchはいくつかの追加コマンドを追加します。
USE `test`; // <----------
DROP procedure IF EXISTS `p2`; // <----------
DELIMITER $$
USE `test`$$ // <----------
CREATE PROCEDURE test.`p2` ()
LANGUAGE SQL
DETERMINISTIC
COMMENT 'Adds "nson" to first and last names in the record.'
BEGIN
SELECT 'Hello World';
END $$
DELIMITER ; // <----------
これらのコマンドは、ストアドプロシージャの構文に厳密に関連しているわけではなく、単なる商品です。他のMySQLクライアント(HeidiSQLや公式のコマンドラインユーティリティなど)はそれらを追加しません。最後の区切り文字の変更は、同じ接続での将来のステートメントの問題を回避するためのリセットである可能性があります。
プロシージャコードの開始位置と終了位置をクライアントに指示するには、区切り文字を変更する必要があります。問題は、プロシージャ本体は通常SQLステートメントのコレクションであるため、区切り文字の変更を省略すると、MySQLは一連のステートメントを実行しようとしていると見なします。最初のステートメントは次のようになります。
CREATE PROCEDURE test.`p2` ()
LANGUAGE SQL
DETERMINISTIC
COMMENT 'Adds "nson" to first and last names in the record.'
BEGIN
SELECT 'Hello World';
DELIMITER $$
を使用 あなたはMySQLにあなたの完全なステートメントがCREATE
から来ることを伝えています END
へ 。単なる構文糖衣です:DELIMITER
SQLキーワードでもありません。たとえば、HeidiSQLは、プロシージャ本体を記述するテキストボックスを備えたGUIを提供するため、DELIMITERの回避策は必要ありません。