【问题标题】:How to stop execute full stored procedure in MySQL?如何停止在 MySQL 中执行完整的存储过程?
【发布时间】:2018-01-21 11:04:01
【问题描述】:

我在 MySQL 中编写了一个程序。我在我的程序中设置了一些条件。 IF 条件不会填满,则程序将退出或完整的程序不会执行。这意味着我想停止执行我的程序的下一行。在 oracle 中,我使用了 GOTO stop_level;。在 MySQL 中,我已经看到我的完整过程已经执行。我想声明一个 LEAVE 标签,以便它可以跳转到 LEAVE 标签并返回设置消息。这是我的 MySQL 程序

CREATE PROCEDURE my_spring.`login_auth`(IN  in_email      varchar(100),
                                    IN  in_password   varchar(100),                                       
                                    OUT user_id       INT,
                                    OUT out_code      INT,
                                    OUT out_message   VARCHAR(1024))
BEGIN
  BEGIN
   IF in_email IS NULL OR in_email = ''
    THEN
       SET out_code = 1;
       SET out_message = 'Please Enter Your Email.';
        /* Exit here*/
  END IF;

 IF in_password IS NULL OR in_password = ''
   THEN
     SET out_code = 1;
     SET out_message = 'Please Enter Your password.';
     /* Exit here*/
 END IF;


 END  ;


END;

我用过oracle的GOTO功能。当条件不匹配时,我调用 GOTO stop_label,它将跳转到停止标签不执行下一行代码。我想像 oracle 一样处理我的程序 GOTO stop_level 这是 stop_level 代码

  <<stop_level>>
 IF out_code = 0
 THEN
    COMMIT;
    out_message := out_message;
  ELSE
     ROLLBACK;
      out_code := 1;
      out_message := out_message;
  END IF;

怎么做?

【问题讨论】:

标签: mysql stored-procedures control-flow


【解决方案1】:

MySQL 没有类似于 Oracle 的 GOTO,但他们确实可以选择使用 LEAVE 级别(您已经提到过)移动控制。在您的场景中,您可以调整 BEGIN

leaveBlock:BEGIN
IF in_email IS NULL OR in_email = ''
    THEN
       SET out_code = 1;
       SET out_message = 'Please Enter Your Email.';
        LEAVE leaveBlock;
  END IF;

 IF in_password IS NULL OR in_password = ''
   THEN
     SET out_code = 1;
     SET out_message = 'Please Enter Your password.';
     LEAVE leaveBlock;
 END IF;

END leaveBlock;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-01-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-24
    • 2011-07-05
    相关资源
    最近更新 更多