Bagian 1
Pembatas digunakan untuk objek sumber seperti prosedur/fungsi tersimpan, pemicu, atau peristiwa. Semua objek ini mungkin memiliki badan - kode dalam klausa BEGIN...END.
Semua pernyataan dalam skrip MySQL harus diakhiri dengan pembatas, defaultnya adalah ';'. Tetapi apa yang harus dilakukan jika objek sumber memiliki tubuh dengan beberapa pernyataan, mis:
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);
Berapa banyak stateman? 3 atau 8? Jawabannya adalah tiga, karena skrip memiliki dua pernyataan INSERT dan satu CREATE PROCEDURE. Seperti yang Anda lihat, CREATE PROCEDURE juga memiliki beberapa pernyataan internal; kita harus mengatakan kepada klien MySQL bahwa semua pernyataan ini (di dalam BEGIN...END) - adalah bagian dari SATU pernyataan; kita bisa melakukannya dengan bantuan pembatas:
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);
Perhatikan, bila pemicu Anda tidak memiliki klausa BEGIN...END, pembatas dapat dihilangkan.
Bagian 2
Tanpa pembatas, pernyataan akan diuraikan sebagai -
CREATE PROCEDURE procedure1()
BEGIN
SET @s = 'SELECT SQRT(POW(?,2) + POW(?,2)) AS hypotenuse';
bukannya -
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