Necesitamos tu apoyo para difundir nuestras secciones con relación a las ciencias de la computación.
Solución:
Delimitadores distintos de los predeterminados ;
se utilizan normalmente al definir funciones, procedimientos almacenados y activadores en los que debe definir varias declaraciones. Usted define un delimitador diferente como $$
que se usa para definir el final de todo el procedimiento, pero dentro de él, cada declaración individual termina con ;
. De esa manera, cuando el código se ejecuta en el mysql
cliente, el cliente puede saber dónde termina todo el procedimiento y ejecutarlo como una unidad en lugar de ejecutar las instrucciones individuales que contiene.
Tenga en cuenta que el DELIMITER
palabra clave es una función de la línea de comando mysql
cliente (y algunos otros clientes) solamente y no una característica regular del lenguaje MySQL. No funcionará si intenta pasarlo a través de una API de lenguaje de programación 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 ;
intentando usar DELIMITER
con un cliente que no lo admita, hará que se envíe al servidor, lo 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 para usar cerca de ‘DELIMITER $$’ en la línea 1
La declaración DELIMITER cambia el delimitador estándar que es punto y coma (;) a otro. El delimitador se cambia del punto y coma (;) a doble barra //.
¿Por qué tenemos que cambiar el delimitador?
Porque queremos pasar el procedimiento almacenado, las funciones personalizadas, etc. al servidor como un todo en lugar de dejar que la herramienta mysql interprete cada declaración a la vez.
Cuando crea una rutina almacenada que tiene un BEGIN...END
bloque, las declaraciones dentro del bloque terminan con punto y coma (;)
. Pero el CREATE PROCEDURE
declaración también necesita un terminador. Entonces se vuelve ambiguo si el punto y coma dentro del cuerpo de la rutina termina CREATE PROCEDURE
, o termina una de las declaraciones dentro del cuerpo del procedimiento.
La forma de resolver la ambigüedad es declarar una diferencia string (que no debe aparecer dentro del cuerpo del procedimiento) que el cliente MySQL reconoce como el true terminador para el CREATE PROCEDURE
declaración.