MySQL DECLARE… Instrução HANDLER

Resumo : neste tutorial, você aprenderá como usar o manipulador MySQL para lidar com erros ou avisos encontrados em procedimentos armazenados.

No MySQL, condições referem-se a erros, avisos ou casos excepcionais que requerem tratamento adequado.

Quando surge uma condição durante a execução de um procedimento armazenado, você deve tratá-la adequadamente, como sair ou continuar o bloco de código atual.

Para lidar com uma condição, você declara um manipulador usando a DECLARE ... HANDLERinstrução.

Introdução ao MySQL DECLARE… instrução HANDLER

Aqui está a sintaxe básica da DECLARE...HANDLERinstrução:

DECLARE { EXIT | CONTINUE } HANDLER
    FOR condition_value [, condition_value] ...
    statementLinguagem de código:  PHP  ( php )

Nesta sintaxe:

  • DECLARE { EXIT | CONTINUE } HANDLER: declara um manipulador, instruindo se ele deve sair ou continuar o procedimento armazenado envolvente quando ocorrer uma condição especificada.
    • EXIT: O procedimento armazenado será encerrado.
    • CONTINUE: O procedimento armazenado continuará a execução.
  • FOR condition_value [, condition_value] ...: especifica as condições que ativam o manipulador e você pode especificar diversas condições separando-as com vírgulas.
  • statement: esta instrução ou bloco de instruções é executado quando o procedimento armazenado encontra uma das condições especificadas.

Pode condition_valueser um dos seguintes:

  • mysql_error_code– Este é um número inteiro que indica um código de erro do MySQL, como 1051.
  • SQLWARNING– Este é um atalho para a classe de SQLSTATEvalores que começa com '01'.
  • NOT FOUND– Este é um atalho para a classe de SQLSTATEvalores que começa com '02'.
  • SQLEXCEPTION– Este é um atalho para a classe de SQLSTATEvalores que não começam com '00', '01', ou '02'.
  • SQLSTATE [VALUE] sqlstate_value– Esta é uma string que indica um SQLSTATEvalor, como '42S01'significa “Tabela desconhecida”.

SQLSTATEé um caractere de cinco caracteres que fornece informações sobre o resultado de uma operação SQL. Um SQLSTATEconsiste em duas partes:

  • Código da Classe (dois primeiros caracteres): Indica a categoria geral do erro.
  • Código da Subclasse (Próximos três caracteres): Fornece informações mais específicas sobre o erro dentro da categoria geral.

Por exemplo, um código SQLSTATE ’42S02′ indica uma tabela ausente, onde ’42’ é o código de classe para erro de sintaxe ou violação de regra de acesso e ‘S02’ é o código de subclasse que indica que a tabela não foi encontrada.

MySQL DECLARE… Exemplo de HANDLER

Primeiro, crie uma tabela chamada users:

CREATE TABLE users (
    user_id INT AUTO_INCREMENT PRIMARY KEY,
    username VARCHAR(50) UNIQUE NOT NULL,
    email VARCHAR(50) NOT NULL
);Linguagem de código:  SQL (linguagem de consulta estruturada)  ( sql )

Segundo, defina um procedimento armazenado que insira um novo usuário na userstabela:

DELIMITER //

CREATE PROCEDURE insert_user(
	IN p_username VARCHAR(50), 
    IN p_email VARCHAR(50)
)
BEGIN
  -- SQLSTATE for unique constraint violation
  DECLARE EXIT HANDLER FOR SQLSTATE '23000'
  BEGIN
    -- Handler actions when a duplicate username is detected
    SELECT 'Error: Duplicate username. Please choose a different username.' AS Message;
  END;

  -- Attempt to insert the user into the table
  INSERT INTO users (username, email) VALUES (p_username, p_email);

  -- If the insertion was successful, display a success message
  SELECT 'User inserted successfully' AS Message;

END //

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

Como funciona.

O insert_user()procedimento armazenado aceita dois parâmetros nome de usuário e email.

No procedimento armazenado, declare um manipulador de saída que será ativado quando ocorrer uma violação de restrição exclusiva , indicada pelo SQLSTATE ‘23000’:

DECLARE EXIT HANDLER FOR SQLSTATE '23000'Linguagem de código:  SQL (linguagem de consulta estruturada)  ( sql )

Quando ocorre o erro, o procedimento armazenado retorna a seguinte mensagem e encerra a execução imediatamente:

SELECT 'Error: Duplicate username. Please choose a different username.' AS Message;Linguagem de código:  SQL (linguagem de consulta estruturada)  ( sql )

Insira uma nova linha na userstabela, se ocorrer uma violação de restrição exclusiva, o código dentro do BEGIN ... ENDbloco do manipulador será executado:

INSERT INTO users (username, email) VALUES (p_username, p_email);Linguagem de código:  SQL (linguagem de consulta estruturada)  ( sql )

Se a inserção for bem-sucedida, a seguinte linha de código será executada:

SELECT 'User inserted successfully' AS Message;Linguagem de código:  SQL (linguagem de consulta estruturada)  ( sql )

Terceiro, insira uma nova linha na userstabela chamando o insert_userprocedimento armazenado:

CALL insert_user('jane','[email protected]');Linguagem de código:  SQL (linguagem de consulta estruturada)  ( sql )

Ele retorna a seguinte mensagem:

+----------------------------+
| Message                    |
+----------------------------+
| User inserted successfully |
+----------------------------+
1 row in set (0.01 sec)

Query OK, 0 rows affected (0.01 sec)Linguagem de código:  texto simples  ( texto simples )

Se você executar a instrução novamente, retornará o seguinte erro:

+----------------------------------------------------------------+
| Message                                                        |
+----------------------------------------------------------------+
| Error: Duplicate username. Please choose a different username. |
+----------------------------------------------------------------+
1 row in set (0.00 sec)

Query OK, 0 rows affected (0.01 sec)Linguagem de código:  texto simples  ( texto simples )

Resumo

  • Use manipuladores MySQL para lidar com condições, incluindo avisos e erros em procedimentos armazenados.
  • Use a DECLARE...HANDLERinstrução para declarar um manipulador.

Deixe um comentário

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