Når du bruger den indbyggede procedureeditor, tilføjer MySQL Workbench et par ekstra kommandoer:
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 ; // <----------
Disse kommandoer er ikke strengt relateret til syntaksen for lagrede procedurer, de er blot en vare – andre MySQL-klienter (såsom HeidiSQL eller det officielle kommandolinjeværktøj) vil ikke tilføje dem. Den sidste afgrænsningsændring er sandsynligvis en nulstilling for at undgå problemer i fremtidige udsagn på samme forbindelse.
Du skal ændre afgrænsningen for at instruere klienten om, hvor procedurekoden starter og slutter. Problemet er, at procedureteksten normalt er en samling af SQL-sætninger, så udeladelse af afgrænsningsændringen ville få MySQL til at tro, at du forsøger at køre en række sætninger, hvoraf den første ville være denne:
CREATE PROCEDURE test.`p2` ()
LANGUAGE SQL
DETERMINISTIC
COMMENT 'Adds "nson" to first and last names in the record.'
BEGIN
SELECT 'Hello World';
Med DELIMITER $$
du fortæller MySQL, at din fulde erklæring går fra CREATE
til END
. Det er kun syntaktisk sukker:DELIMITER
er ikke engang et SQL nøgleord. HeidiSQL, for eksempel, giver en GUI med en tekstboks, hvor du skriver procedureteksten, så du behøver ikke DELIMITER-løsningen.