Como lidar com condições sql

Você pode ter o seu olhar programa em SQLSTATE

após a execução de cada instrução SQL. Existem várias possibilidades para o que você pode querer fazer a seguir. O que você faz com o conhecimento que você ganha?

  • Se você encontrar um código de classe 00, você provavelmente não quer fazer nada. Você quer que a execução para proceder como originalmente planejado.

  • Se você encontrar um código de classe 01 ou 02, você pode querer fazer alguma ação especial. Se você espera que o ou a indicação “Atenção” “Not Found”, você provavelmente vai querer deixar a execução prossiga. Se você não esperava qualquer um destes códigos de classe, você provavelmente vai querer ter ramo de execução para um procedimento que é projetado especificamente para lidar com o inesperado, mas não totalmente inesperado, avisando ou não encontrados resultado.

  • Se você receber qualquer outro código de classe, algo está errado. Você deve ramificar a um procedimento de tratamento de exceção. Qual o procedimento que você escolher para desviar para depende do conteúdo dos três personagens subclasse, bem como os dois personagens de classe de SQLSTATE. Se várias exceções diferentes são possíveis, deve haver um procedimento de tratamento de exceção para cada um, porque diferentes exceções muitas vezes exigem respostas diferentes.

    Você pode ser capaz de corrigir alguns erros ou encontrar soluções alternativas. Outros erros podem ser fatal- ninguém vai morrer, mas você pode acabar por ter de encerrar o aplicativo.

declarações de manipulador

Você pode colocar um manipulador condição dentro de uma instrução composta. Para criar um manipulador de condição, você deve primeiro declarar a condição de que ele vai lidar. A condição declarada pode ser algum tipo de exceção, ou pode ser apenas algo que é verdade. Aqui estão algumas condições possíveis.

Video: TUTORIAL SQL SELECT DISTINCT con MySql Workbench

CondiçãoDescrição
VALOR SQLSTATE
&lsquo-xxyyy&rsquo-
Específico SQLSTATE valor
SQLEXCEPTIONSQLSTATE classe diferente 00, 01, ou 02
SQLWARNINGSQLSTATE classe 01
NÃO ENCONTRADOSQLSTATE classe 02

O seguinte é um exemplo de uma declaração condição:

`23000` -END BEGINDECLARE constraint_violation CONDITIONFOR SQLSTATE VALOR -

Este exemplo não é realista, porque normalmente a instrução SQL que podem causar a condição de ocorrer -, bem como o manipulador que seria invocada se lhe ocorreu a condição - também seria fechado dentro do BEGIN ... END estrutura.

ações manipulador e efeitos manipulador

Se ocorrer uma condição que invoca um manipulador, a ação especificada pelo manipulador executa. Esta ação é uma instrução SQL, que pode ser uma instrução composta. Se a ação manipulador concluído com êxito, então o efeito manipulador executa. A seguir está uma lista dos três efeitos manipulador possíveis:



  • CONTINUAR: Continuar a execução imediatamente após a instrução que causou o manipulador a ser chamado.

  • SAÍDA: Continuar a execução após a instrução composto que contém o manipulador.

    Video: Como usar distinct en SQL

  • DESFAZER: Desfazer o trabalho das declarações anteriores da instrução composta e, em seguida, continuar a execução após a instrução que contém o manipulador.

Se o manipulador pode corrigir qualquer problema invocado o manipulador, então o CONTINUAR efeito pode ser apropriado. o SAÍDA efeito pode ser apropriado se o manipulador não corrigir o problema, mas as alterações feitas para o comando composto não precisa ser desfeita. o DESFAZER efeito é apropriado se você quiser retornar o banco de dados ao estado em que estava antes da instrução composta iniciou a execução.

Considere o seguinte exemplo:

BEGIN ATOMICDECLARE constraint_violation CONDITIONFOR SQLSTATE VALOR `23000` -DECLARE UNDO HANDLERFOR constraint_violationRESIGNAL -INSERT INTO alunos (StudentID, Fname, Lname) VALUES (: sid,: sfname,: slname) -INSERT INTO roster (ClassID, Class, StudentID) VALUES (: cid,: cname,: sid) -END -

Se surgir algum dos INSERIR declarações causa uma violação de restrição, como a tentativa de adicionar um registro com uma chave primária que duplica uma chave primária já em cima da mesa, SQLSTATE assume um valor de ‘23000’, definindo assim a constraint_violation condição para um valor verdadeiro.

Esta ação faz com que o manipulador DESFAZER quaisquer alterações que foram feitas para quaisquer tabelas por qualquer INSERIR comando. o RESIGNAL transferências de instrução de controle de volta para o procedimento que chamou o procedimento atualmente em execução.

Se ambos INSERIR declarações executar com sucesso, a execução continua com a instrução seguinte ao FIM palavra-chave.

o ATOMIC palavra-chave é obrigatória sempre que o efeito de um manipulador é DESFAZER. Este não é o caso para manipuladores cujo efeito é tanto CONTINUAR ou SAÍDA.


Publicações relacionadas