Delimitador MySQL

Resumo : neste tutorial, você aprenderá como alterar o delimitador padrão do MySQL usando o DELIMITERcomando.

Quando você deseja executar várias instruções SQL , use ponto e vírgula ( ;) para separar duas instruções, conforme mostrado no exemplo a seguir:

SELECT * FROM products;

SELECT * FROM customers;Linguagem de código:  SQL (linguagem de consulta estruturada)  ( sql )

Um programa cliente MySQL, como MySQL Workbench ou o programa mysql, usa o delimitador padrão ( ;) para separar instruções e executar cada uma separadamente.

No entanto, um procedimento armazenado consiste em várias instruções separadas por ponto e vírgula ( ;).

Se você usar um programa cliente MySQL para definir um procedimento armazenado que contém ponto e vírgula, o programa cliente MySQL não tratará todo o procedimento armazenado como uma única instrução; em vez disso, ele irá reconhecê-lo como múltiplas instruções.

Portanto, é necessário redefinir temporariamente o delimitador para que você possa passar todo o procedimento armazenado para o servidor como uma única instrução.

Para redefinir o delimitador padrão, use o DELIMITERcomando a seguir:

DELIMITER delimiter_characterLinguagem de código:  SQL (linguagem de consulta estruturada)  ( sql )

O delimiter_characterpode consistir em um único caractere ou em vários caracteres, como //ou $$. No entanto, você deve evitar usar a barra invertida ( \) porque é o caractere de escape no MySQL.

O MySQL usa barra invertida (\) como caractere de escape, o que permite incluir caracteres especiais em strings sem desencadear erros de sintaxe. Por exemplo, você pode usar o caractere de escape para incluir aspas simples em uma string como esta:SELECT 'It\'s a sunny day';

O exemplo a seguir ilustra como alterar o delimitador atual para //:

DELIMITER //Linguagem de código:  SQL (linguagem de consulta estruturada)  ( sql )

Depois de alterar o delimitador, você poderá usar o novo delimitador para finalizar uma instrução, da seguinte maneira:

DELIMITER //

SELECT * FROM customers //

SELECT * FROM products //Linguagem de código:  SQL (linguagem de consulta estruturada)  ( sql )

Para reverter para o delimitador padrão, que é um ponto e vírgula ( ;), use a seguinte instrução:

DELIMITER ;Linguagem de código:  SQL (linguagem de consulta estruturada)  ( sql )

Utilizando MySQL DELIMITER para procedimentos armazenados

Normalmente, um procedimento armazenado contém várias instruções separadas por ponto e vírgula (;).

Para compilar todo o procedimento armazenado como uma única instrução composta, você deve alterar temporariamente o delimitador de ponto e vírgula ( ;) para outro delimitador, como $$ou //:

DELIMITER $$

CREATE PROCEDURE CreatePersonTable()
BEGIN
    -- drop persons table 
    DROP TABLE IF EXISTS persons;
    
    -- create persons table
    CREATE TABLE persons(
        id INT AUTO_INCREMENT PRIMARY KEY,
        first_name VARCHAR(255) NOT NULL,
        last_name VARCHAR(255) NOT NULL
    );
    
    -- insert data into the persons table
    INSERT INTO persons(first_name, last_name)
    VALUES('John','Doe'),
		  ('Jane','Doe');
	
    -- retrieve data from the persons table
    SELECT id, first_name, last_name 
    FROM persons;
END $$

DELIMITER ;Linguagem de código:  SQL (linguagem de consulta estruturada)  ( sql )

Observe que você aprenderá a sintaxe de criação de um procedimento armazenado no próximo tutorial.

Neste código:

  • Primeiro, altere o delimitador padrão para $$.
  • Segundo, use o ponto e vírgula ( ;) no corpo do procedimento armazenado e $$após a ENDpalavra-chave para encerrar o procedimento armazenado.
  • Terceiro, reverta para o delimitador padrão ( ;).

Resumo

  • Utilize o DELIMITERcomando para alterar o delimitador padrão ( ;) para outro de sua preferência.

Deixe um comentário

O seu endereço de email não será publicado. Campos obrigatórios marcados com *