Del 1
Afgrænsningerne bruges til kildeobjekter som lagret procedure/funktion, trigger eller hændelse. Alle disse objekter kan have en body - kode i BEGIN...END klausulen.
Alle sætninger i MySQL scripts skal afsluttes med skilletegn, standard er ';'. Men hvad skal man gøre, hvis kildeobjektet har krop med nogle udsagn, f.eks.:
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);
Hvor mange statsmænd? 3 eller 8? Svaret er tre, fordi scriptet har to INSERT- og en CREATE PROCEDURE-sætning. Som du kan se, har CREATE PROCEDURE også nogle interne erklæringer; vi bør sige til MySQL-klienten, at alle disse sætninger (inde i BEGIN...END) - er en del af EN sætning; vi kan gøre det ved hjælp af skilletegn:
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);
Bemærk, når din trigger ikke har nogen BEGIN...END-sætning, kan afgrænsningstegn udelades.
Del 2
Uden skilletegn vil sætningen blive parset som -
CREATE PROCEDURE procedure1()
BEGIN
SET @s = 'SELECT SQRT(POW(?,2) + POW(?,2)) AS hypotenuse';
i stedet for -
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