如何在 MySQL 中停止执行完整的存储过程?
How to stop execute full stored procedure in MySQL?
我在MySQL写了一个程序。我在程序中设置了一些条件。如果条件未满足,则程序将退出或完整程序将不会执行。这意味着我想停止执行程序的下一行。在 oracle 中我使用了 GOTO stop_level;。在 MySQL 中,我看到我的完整程序已经执行。我想声明一个 LEAVE 标签,以便它可以跳转到 LEAVE 标签 & return with set message。这是我的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 没有类似于 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;
我在MySQL写了一个程序。我在程序中设置了一些条件。如果条件未满足,则程序将退出或完整程序将不会执行。这意味着我想停止执行程序的下一行。在 oracle 中我使用了 GOTO stop_level;。在 MySQL 中,我看到我的完整程序已经执行。我想声明一个 LEAVE 标签,以便它可以跳转到 LEAVE 标签 & return with set message。这是我的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 没有类似于 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;