Los delimitadores que no sean los predeterminados ;
se usan generalmente al definir funciones, procedimientos almacenados y disparadores en los que debe definir varias declaraciones. Usted define un delimitador diferente, como el $$
que se usa para definir el final de todo el procedimiento, pero dentro de él, cada declaración finaliza ;
. De esa manera, cuando el código se ejecuta en elmysql
cliente, el cliente puede decir dónde termina todo el procedimiento y ejecutarlo como una unidad en lugar de ejecutar las declaraciones individuales en su interior.
Tenga en cuenta que la DELIMITER
palabra clave es una función del mysql
cliente de línea de comandos (y algunos otros clientes) solamente y no una característica normal del lenguaje MySQL. No funcionará si intentas pasarlo a través de un lenguaje de programación API a MySQL. Algunos otros clientes como PHPMyAdmin tienen otros métodos para especificar un delimitador no predeterminado.
Ejemplo:
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 ;
Si intenta utilizarlo DELIMITER
con un cliente que no lo admite, lo enviará al servidor, que informará un error de sintaxis. Por ejemplo, usando PHP y MySQLi:
$mysqli = new mysqli('localhost', 'user', 'pass', 'test');
$result = $mysqli->query('DELIMITER $$');
echo $mysqli->error;
Errores con:
Tiene un error en su sintaxis SQL; consulte el manual que corresponde a la versión de su servidor MySQL para conocer la sintaxis correcta que se debe usar cerca de 'DELIMITER $$' en la línea 1