如何建立mysql - 如何用mysql创建数据库




Mysql-如何退出/退出存储过程 (4)

为什么不这样做:

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

我有一个非常简单的问题,但我没有得到任何简单的代码使用Mysql从SP退出。 任何人都可以与我分享如何做到这一点?

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;

如果您希望在没有错误的情况下提前退出,请使用@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


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;

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;




stored-procedures