Delimitadores diferentes do padrão
;
são normalmente usados ao definir funções, procedimentos armazenados e gatilhos nos quais você deve definir várias instruções. Você define um delimitador diferente como $$
que é usado para definir o final de todo o procedimento, mas dentro dele, as instruções individuais são terminadas por ;
. Dessa forma, quando o código é executado no mysql
cliente, o cliente pode dizer onde todo o procedimento termina e executá-lo como uma unidade em vez de executar as instruções individuais dentro dele. Observe que o
DELIMITER
palavra-chave é uma função da linha de comando mysql
cliente (e alguns outros clientes) apenas e não um recurso de linguagem MySQL regular. Não funcionará se você tentar passá-lo por meio de uma API de linguagem de programação para o MySQL. Alguns outros clientes como PHPMyAdmin têm outros métodos para especificar um delimitador não padrão. Exemplo:
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 ;
Tentando usar
DELIMITER
com um cliente que não o suporta fará com que seja enviado ao servidor, que reportará um erro de sintaxe. Por exemplo, usando PHP e MySQLi:$mysqli = new mysqli('localhost', 'user', 'pass', 'test');
$result = $mysqli->query('DELIMITER $$');
echo $mysqli->error;
Erros com:
Você tem um erro em sua sintaxe SQL; verifique o manual que corresponde à versão do seu servidor MySQL para a sintaxe correta a ser usada perto de 'DELIMITER $$' na linha 1