Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Procedimentos armazenados usando o MySQL Workbench


Ao usar o editor de procedimentos integrado, o MySQL Workbench adiciona alguns comandos extras:
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 ; // <----------

Esses comandos não estão estritamente relacionados à sintaxe de procedimentos armazenados, eles são meramente uma mercadoria—outros clientes MySQL (como HeidiSQL ou o utilitário de linha de comando oficial) não irão adicioná-los. A última alteração do delimitador é provavelmente uma redefinição para evitar problemas em instruções futuras na mesma conexão.

Você precisa alterar o delimitador para instruir o cliente sobre onde o código do procedimento começa e termina. O problema é que o corpo do procedimento é normalmente uma coleção de instruções SQL, então omitir a alteração do delimitador faria o MySQL pensar que você está tentando executar uma série de instruções, a primeira das quais seria esta:
CREATE PROCEDURE test.`p2` ()
LANGUAGE SQL
DETERMINISTIC
COMMENT 'Adds "nson" to first and last names in the record.'
BEGIN
SELECT 'Hello World';

Com DELIMITER $$ você está dizendo ao MySQL que sua instrução completa vai de CREATE para END . É apenas açúcar sintático:DELIMITER nem é uma palavra-chave SQL. O HeidiSQL, por exemplo, fornece uma GUI com uma caixa de texto onde você escreve o corpo do procedimento, portanto, você não precisa da solução alternativa DELIMITER.