Jiné oddělovače než výchozí ;
se obvykle používají při definování funkcí, uložených procedur a spouštěčů, kde musíte definovat více příkazů. Můžete definovat jiný oddělovač, například $$
který se používá k definování konce celé procedury, ale uvnitř ní jsou jednotlivé příkazy zakončeny ;
. Tímto způsobem, když je kód spuštěn v mysql
klient může zjistit, kde celá procedura končí, a provést ji jako celek namísto provádění jednotlivých příkazů uvnitř.
Všimněte si, že DELIMITER
klíčové slovo je funkcí příkazového řádku mysql
pouze klient (a někteří další klienti) a nikoli běžná funkce jazyka MySQL. Nebude to fungovat, pokud se to pokusíte předat přes API programovacího jazyka do MySQL. Někteří další klienti, jako je PHPMyAdmin, mají jiné metody pro určení jiného než výchozího oddělovače.
Příklad:
DELIMITER $$
/* This is a complete statement, not part of the procedure, so use the custom delimiter $$ */
DROP PROCEDURE my_procedure$$
/* Now start the procedure code */
CREATE PROCEDURE my_procedure ()
BEGIN
/* Inside the procedure, individual statements terminate with ; */
CREATE TABLE tablea (
col1 INT,
col2 INT
);
INSERT INTO tablea
SELECT * FROM table1;
CREATE TABLE tableb (
col1 INT,
col2 INT
);
INSERT INTO tableb
SELECT * FROM table2;
/* whole procedure ends with the custom delimiter */
END$$
/* Finally, reset the delimiter to the default ; */
DELIMITER ;
Pokus o použití DELIMITER
s klientem, který jej nepodporuje, způsobí jeho odeslání na server, který ohlásí chybu syntaxe. Například pomocí PHP a MySQLi:
$mysqli = new mysqli('localhost', 'user', 'pass', 'test');
$result = $mysqli->query('DELIMITER $$');
echo $mysqli->error;
Chyby s:
Máte chybu v syntaxi SQL; podívejte se do manuálu, který odpovídá verzi vašeho serveru MySQL, kde najdete správnou syntaxi blízko „DELIMITER $$“ na řádku 1