I delimitatori diversi da quelli predefiniti ;
vengono in genere utilizzati quando si definiscono funzioni, stored procedure e trigger in cui è necessario definire più istruzioni. Definisci un delimitatore diverso come quello $$
utilizzato per definire la fine dell'intera procedura, ma al suo interno le singole istruzioni sono terminate da ciascuna ;
. In questo modo, quando il codice viene eseguito nel mysql
client, il client può dire dove termina l'intera procedura ed eseguirlo come unità anziché eseguire le singole istruzioni all'interno.
Si noti che la DELIMITER
parola chiave è una funzione del mysql
client della riga di comando (e di alcuni altri client) e non una normale funzione del linguaggio MySQL. Non funzionerà se si tenta di passarlo attraverso un'API del linguaggio di programmazione a MySQL. Alcuni altri client come PHPMyAdmin hanno altri metodi per specificare un delimitatore non predefinito.
Esempio:
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 ;
Tentare di utilizzare DELIMITER
con un client che non lo supporta causerà l'invio al server, che segnalerà un errore di sintassi. Ad esempio, usando PHP e MySQLi:
$mysqli = new mysqli('localhost', 'user', 'pass', 'test');
$result = $mysqli->query('DELIMITER $$');
echo $mysqli->error;
Errori con:
Si è verificato un errore nella sintassi SQL; controlla il manuale corrispondente alla versione del tuo server MySQL per la sintassi corretta da usare vicino a "DELIMITER $$" alla riga 1