Mysql - Как выйти из программы хранения

У меня очень простой вопрос, но я не получил никакого простого кода для выхода из SP с помощью Mysql. Может ли кто-нибудь поделиться со мной, как это сделать?

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;

Ответ 1

CREATE PROCEDURE SP_Reporting(IN tablename VARCHAR(20))
proc_label:BEGIN
     IF tablename IS NULL THEN
          LEAVE proc_label;
     END IF;

     #proceed the code
END;

Ответ 2

Не существует способа: гениев в MySQL не думали, что это было необходимо - они предпочитают массово долго, если блоки к элегантному шаблону кодирования "выйти с раннего".

Однако, чтобы справиться с этой ситуацией (в прошлом я использовал хороший эффект), нужно разбить процедуру на логические части, например:

CREATE PROCEDURE SP_Reporting(IN tablename VARCHAR(20))
BEGIN
     IF tablename IS NOT NULL THEN
         CALL SP_Reporting_2(tablename);
     END IF;
END;

CREATE PROCEDURE SP_Reporting_2(IN tablename VARCHAR(20))
BEGIN
     #proceed with code
END;

Ответ 3

Почему бы не это:

CREATE PROCEDURE SP_Reporting(IN tablename VARCHAR(20))
BEGIN
     IF tablename IS NOT NULL THEN
          #proceed the code
     END IF;
     # Do nothing otherwise
END;

Ответ 4

Если вы хотите "ранний выход" для ситуации, в которой не было ошибки, используйте принятый ответ, отправленный @piotrm. Наиболее типично, однако, вы столкнетесь с ошибкой из-за ошибки (особенно в процедуре SQL).

По версии MySQL v5.5 вы можете создать исключение. Отрицание обработчиков исключений и т.д., Которые достигнут того же результата, но более чистым, более острым образом.

Вот как:

DECLARE CUSTOM_EXCEPTION CONDITION FOR SQLSTATE '45000';

IF <Some Error Condition> THEN      
    SIGNAL CUSTOM_EXCEPTION
    SET MESSAGE_TEXT = 'Your Custom Error Message';
END IF;     

Примечание SQLSTATE '45000' означает "Необработанное пользовательское условие исключения". По умолчанию это приведет к появлению кода ошибки 1644 (который имеет то же значение). Обратите внимание, что вы можете выбросить другие коды условий или коды ошибок, если хотите (плюс дополнительные сведения об обработке исключений).

Подробнее об этом, проверьте:

https://dev.mysql.com/doc/refman/5.5/en/signal.html

Как поднять ошибку в функции MySQL

http://www.databasejournal.com/features/mysql/mysql-error-handling-using-the-signal-and-resignal-statements.html

Ответ 5

MainLabel:BEGIN

IF (<condition>) IS NOT NULL THEN
    LEAVE MainLabel;
END IF; 

....code

i.e.
IF (@skipMe) IS NOT NULL THEN /* @skipMe returns Null if never set or set to NULL */
     LEAVE MainLabel;
END IF;