Mysql
 sql >> Database >  >> RDS >> Mysql

Stored procedure utilizzando MySQL Workbench

Quando si utilizza l'editor di procedure integrato, MySQL Workbench aggiunge alcuni comandi extra:

USE `test`; // <----------
DROP procedure IF EXISTS `p2`;  // <----------

DELIMITER $$
USE `test`$$ // <----------
CREATE PROCEDURE test.`p2` ()
LANGUAGE SQL
DETERMINISTIC
COMMENT 'Adds "nson" to first and last names in the record.'
BEGIN
SELECT 'Hello World';
END $$

DELIMITER ; // <----------

Questi comandi non sono strettamente correlati alla sintassi delle procedure memorizzate, sono semplicemente una merce:altri client MySQL (come HeidiSQL o l'utilità della riga di comando ufficiale) non li aggiungeranno. L'ultima modifica del delimitatore è probabilmente un ripristino per evitare problemi nelle istruzioni future sulla stessa connessione.

È necessario modificare il delimitatore per istruire il client su dove inizia e dove termina il codice della procedura. Il problema è che il corpo della procedura è normalmente una raccolta di istruzioni SQL, quindi omettere la modifica del delimitatore farebbe pensare a MySQL che stai tentando di eseguire una serie di istruzioni, la prima delle quali sarebbe questa:

CREATE PROCEDURE test.`p2` ()
LANGUAGE SQL
DETERMINISTIC
COMMENT 'Adds "nson" to first and last names in the record.'
BEGIN
SELECT 'Hello World';

Con DELIMITER $$ stai dicendo a MySQL che la tua dichiarazione completa va da CREATE a END . È solo zucchero sintattico:DELIMITER non è nemmeno una parola chiave SQL. HeidiSQL, ad esempio, fornisce una GUI con una casella di testo in cui scrivi il corpo della procedura, quindi non hai bisogno della soluzione DELIMITER.