sql >> Base de Datos >  >> RDS >> Mysql

Procedimientos almacenados usando MySQL Workbench

Al usar el editor de procedimientos incorporado, MySQL Workbench agrega algunos comandos adicionales:

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 ; // <----------

Esos comandos no están estrictamente relacionados con la sintaxis de los procedimientos almacenados, son simplemente una mercancía:otros clientes de MySQL (como HeidiSQL o la utilidad de línea de comandos oficial) no los agregarán. El último cambio de delimitador es probablemente un reinicio para evitar problemas en declaraciones futuras en la misma conexión.

Debe cambiar el delimitador para indicarle al cliente dónde comienza y termina el código del procedimiento. El problema es que el cuerpo del procedimiento es normalmente una colección de sentencias SQL, por lo que omitir el cambio del delimitador haría que MySQL pensara que está intentando ejecutar una serie de sentencias, la primera de las cuales sería esta:

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

Con DELIMITER $$ le está diciendo a MySQL que su declaración completa va desde CREATE para END . Es solo azúcar sintáctico:DELIMITER ni siquiera es una palabra clave de SQL. HeidiSQL, por ejemplo, proporciona una GUI con un cuadro de texto donde escribe el cuerpo del procedimiento, por lo que no necesita la solución DELIMITER.