Когато използвате вградения редактор на процедури, MySQL Workbench добавя няколко допълнителни команди:
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 ; // <----------
Тези команди не са строго свързани със синтаксиса на съхранените процедури, те са просто стока — други MySQL клиенти (като HeidiSQL или официалната помощна програма за команден ред) няма да ги добавят. Последната промяна на разделителя вероятно е нулиране, за да се избегнат проблеми в бъдещи изрази за същата връзка.
Трябва да промените разделителя, за да инструктирате клиента къде започва и завършва кодът на процедурата. Проблемът е, че тялото на процедурата обикновено е колекция от SQL изрази, така че пропускането на промяната на разделителя би накарало MySQL да мисли, че се опитвате да изпълните серия от оператори, първият от които би бил следният:
CREATE PROCEDURE test.`p2` ()
LANGUAGE SQL
DETERMINISTIC
COMMENT 'Adds "nson" to first and last names in the record.'
BEGIN
SELECT 'Hello World';
С DELIMITER $$
казвате на MySQL, че пълният ви израз идва от CREATE
до END
. Това е просто синтактична захар:DELIMITER
дори не е SQL ключова дума. HeidiSQL, например, предоставя графичен интерфейс с текстово поле, в което пишете тялото на процедурата, като по този начин нямате нужда от решението DELIMITER.