パート1
区切り文字は、ストアドプロシージャ/関数、トリガー、イベントなどのソースオブジェクトに使用されます。これらのオブジェクトはすべて、本文(BEGIN ... END句内のコード)を持つ場合があります。
MySQLスクリプトのすべてのステートメントは、区切り文字で終了する必要があります。デフォルトは「;」です。ただし、ソースオブジェクトに次のようなステートメントを含む本文がある場合の対処方法:
INSERT INTO table1 VALUES(1);
CREATE PROCEDURE procedure1()
BEGIN
SET @s = 'SELECT SQRT(POW(?,2) + POW(?,2)) AS hypotenuse';
PREPARE stmt2 FROM @s;
SET @a = 6;
SET @b = 8;
EXECUTE stmt2 USING @a, @b;
END;
INSERT INTO table1 VALUES(2);
何人の政治家? 3または8?スクリプトには2つのINSERTと1つのCREATEPROCEDUREステートメントがあるため、答えは3つです。ご覧のとおり、CREATEPROCEDUREにはいくつかの内部ステートメントもあります。これらすべてのステートメント(BEGIN ... END内)は1つのステートメントの一部であるとMySQLクライアントに伝える必要があります。区切り文字を使用してそれを行うことができます:
INSERT INTO table1 VALUES(1);
DELIMITER $$
CREATE PROCEDURE procedure1()
BEGIN
SET @s = 'SELECT SQRT(POW(?,2) + POW(?,2)) AS hypotenuse';
PREPARE stmt2 FROM @s;
SET @a = 6;
SET @b = 8;
EXECUTE stmt2 USING @a, @b;
END$$
DELIMITER ;
INSERT INTO table1 VALUES(2);
トリガーにBEGIN...END句がない場合、区切り文字を省略できます。
パート2
区切り文字がない場合、ステートメントは-
として解析されます。CREATE PROCEDURE procedure1()
BEGIN
SET @s = 'SELECT SQRT(POW(?,2) + POW(?,2)) AS hypotenuse';
-
の代わりにCREATE PROCEDURE procedure1()
BEGIN
SET @s = 'SELECT SQRT(POW(?,2) + POW(?,2)) AS hypotenuse';
PREPARE stmt2 FROM @s;
SET @a = 6;
SET @b = 8;
EXECUTE stmt2 USING @a, @b;
END