Podczas korzystania z wbudowanego edytora procedur MySQL Workbench dodaje kilka dodatkowych poleceń:
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 ; // <----------
Polecenia te nie są ściśle związane ze składnią procedur składowanych, są jedynie towarem — inni klienci MySQL (tacy jak HeidiSQL lub oficjalne narzędzie wiersza poleceń) ich nie dodadzą. Ostatnią zmianą ogranicznika jest prawdopodobnie zresetowanie, aby uniknąć problemów w przyszłych oświadczeniach dotyczących tego samego połączenia.
Musisz zmienić ogranicznik, aby poinstruować klienta, gdzie zaczyna się i kończy kod procedury. Problem polega na tym, że ciało procedury jest zwykle zbiorem instrukcji SQL, więc pominięcie zmiany ogranicznika sprawiłoby, że MySQL pomyślałby, że próbujesz uruchomić serię instrukcji, z których pierwsza będzie taka:
CREATE PROCEDURE test.`p2` ()
LANGUAGE SQL
DETERMINISTIC
COMMENT 'Adds "nson" to first and last names in the record.'
BEGIN
SELECT 'Hello World';
Z DELIMITER $$
mówisz MySQL, że twoje pełne oświadczenie pochodzi z CREATE
do END
. To tylko cukier składniowy:DELIMITER
nie jest nawet słowem kluczowym SQL. Na przykład HeidiSQL zapewnia GUI z polem tekstowym, w którym piszesz treść procedury, dzięki czemu nie potrzebujesz obejścia DELIMITER.