1

SQLYog でストアド プロシージャを作成すると、次のテンプレートが提供されます。

DELIMITER $$

CREATE
    /*[DEFINER = { user | CURRENT_USER }]*/
    PROCEDURE `apachelogs`.`test`()
    /*LANGUAGE SQL
    | [NOT] DETERMINISTIC
    | { CONTAINS SQL | NO SQL | READS SQL DATA | MODIFIES SQL DATA }
    | SQL SECURITY { DEFINER | INVOKER }
    | COMMENT 'string'*/
    BEGIN

    END$$

DELIMITER ;

ストアドプロシージャを作成する前に区切り文字を変更するのはなぜだろうか。そして、なぜステートメント;内で区切り文字を使用できるのcreateですか(スコープのせいかもしれません)。

4

1 に答える 1

2

これにより、ステートメント区切り文字が に変更さ$$れ、MySQL がストアド プロシージャ内のセミコロンを区切り文字として解釈しようとしなくなります。がないと、区切りステートメントDELIMITER $$を含むストアド プロシージャを定義することはできません。;これは、プロシージャの定義中にセミコロンをグローバルにエスケープする方法と考えることができます。

細かいマニュアルから:

mysql区切り文字を再定義するには、delimiterコマンドを使用します。次の例は、上記のdorepeat()手順でこれを行う方法を示しています。区切り文字は//、定義全体を単一のステートメントとしてサーバーに渡すことができるように変更され;、プロシージャーを呼び出す前に復元されます。これにより、プロシージャ本体で使用される区切り文字が、 mysql自体;によって解釈されるのではなく、サーバーに渡されるようになります。

私の説明がマニュアルの説明よりも明確かどうかはわかりませんが、どちらか (または両方を組み合わせて) である程度理解できるでしょう。

于 2011-06-13T05:28:31.190 に答える