5

環境に非常に新しいので、コードの最後に追加された行について質問があります。私がフォローしているガイドは次のとおりです。

http://net.tutsplus.com/tutorials/an-introduction-to-stored-procedures/

MySQLストアドプロシージャに関して誰かがより良いものを持っているなら、私はすべての耳です。

質問する前に、これは私が使用している環境です:OS:Windows 7 / WAMP(MySQL 5.5.24)/ MySQL Workbench

区切り文字を定義するように指示されています。私の場合、デフォルトの「$$」を使用しています。

私が作成したストアドプロシージャは次のとおりです。

DELIMITER $$
CREATE PROCEDURE test.`p2` ()
LANGUAGE SQL
DETERMINISTIC
COMMENT 'Adds "nson" to first and last names in the record.'
BEGIN
SELECT 'Hello World';
END $$

このストアドプロシージャを適用してレビュー画面が表示されると、新しいコード行が追加されています。

下部:

DELIMITER ;

この広背筋; DELIMITERステートメントは、定義された区切り文字($$)を使用できるブロックをアナウンスし、最後にブロックを閉じるために追加されますか?

4

1 に答える 1

4

組み込みのプロシージャエディタを使用する場合、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の回避策は必要ありません。

于 2013-02-04T17:15:33.860 に答える