När du använder den inbyggda procedurredigeraren lägger MySQL Workbench till några extra kommandon:
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 ; // <----------
Dessa kommandon är inte strikt relaterade till syntaxen för lagrade procedurer, de är bara en handelsvara – andra MySQL-klienter (som HeidiSQL eller det officiella kommandoradsverktyget) kommer inte att lägga till dem. Den sista avgränsningsändringen är förmodligen en återställning för att undvika problem i framtida satser på samma anslutning.
Du måste ändra avgränsaren för att instruera klienten om var procedurkoden börjar och slutar. Problemet är att procedurkroppen normalt är en samling SQL-satser, så att utelämna avgränsningsändringen skulle få MySQL att tro att du försöker köra en serie satser, varav den första skulle vara denna:
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 talar om för MySQL att ditt fullständiga uttalande kommer från CREATE
till END
. Det är bara syntaktisk socker:DELIMITER
är inte ens ett SQL-nyckelord. HeidiSQL, till exempel, tillhandahåller ett grafiskt användargränssnitt med en textruta där du skriver procedurens brödtext, så du behöver inte en lösning på DELIMITER.