Eu tenho uma pergunta muito simples, mas não recebi nenhum código simples para sair do SP usando o Mysql. Alguém pode compartilhar comigo como fazer isso?
CREATE PROCEDURE SP_Reporting(IN tablename VARCHAR(20))
BEGIN
IF tablename IS NULL THEN
#Exit this stored procedure here
END IF;
#proceed the code
END;
mysql
sql
stored-procedures
Joe Ijam
fonte
fonte
IF tablename IS NOT NULL THEN
...;)Respostas:
fonte
END proc_label;
sintaxe (mostrada na maioria dos exemplos oficiais do MySQL) não é necessária. (esta é uma ótima maneira de comentar uma proc armazenado sem ter que rolar para a parte inferior para colocar*/
no lugar)LEAVE this_proc;
parece perfeito!return <value>
retornar um valor.:
eBEGIN
comoproc_label:BEGIN
deu erro de sintaxe enquantoproc_label: BEGIN
trabalhava.Se você deseja uma "saída antecipada" para uma situação em que não houve erro, use a resposta aceita postada por @piotrm. Geralmente, no entanto, você estará pagando devido a uma condição de erro (especialmente em um procedimento SQL).
A partir do MySQL v5.5, você pode lançar uma exceção. Negar manipuladores de exceção, etc., que obterão o mesmo resultado, mas de uma maneira mais limpa e mais comovente.
Aqui está como:
Nota
SQLSTATE '45000'
equivale a "Condição de exceção definida pelo usuário sem tratamento". Por padrão, isso produzirá um código de erro de1644
(que tem o mesmo significado). Observe que você pode lançar outros códigos de condição ou de erro, se desejar (além de detalhes adicionais para o tratamento de exceções).Para mais informações sobre esse assunto, confira:
https://dev.mysql.com/doc/refman/5.5/en/signal.html
Como gerar um erro dentro de uma função MySQL
http://www.databasejournal.com/features/mysql/mysql-error-handling-using-the-signal-and-resignal-statements.html
Termo aditivo
Ao reler este post, percebi que tinha algo a acrescentar. Antes do MySQL v5.5, havia uma maneira de emular lançando uma exceção. Não é exatamente a mesma coisa, mas este era o análogo: crie um erro chamando um procedimento que não existe. Chame o procedimento com um nome que seja significativo para obter um meio útil para determinar qual era o problema. Quando o erro ocorrer, você verá a linha da falha (dependendo do seu contexto de execução).
Por exemplo:
CALL AttemptedToInsertSomethingInvalid;
Observe que quando você cria um procedimento, não há validação executada para essas coisas. Portanto, enquanto em algo como uma linguagem compilada, você nunca poderia chamar uma função que não estava lá, em um script como este simplesmente falhará no tempo de execução, que é exatamente o que é desejado neste caso!
fonte
Para lidar com essa situação de maneira portátil (ou seja, funcionará em todos os bancos de dados porque não usa o rótulo Kung fu do MySQL), divida o procedimento em partes lógicas, desta forma:
fonte
Por que não isso:
fonte
if
declaração. É logicamente idêntico a um "retorno antecipado".Isso funciona para mim:
fonte
fonte