我终于决定学习如何使用存储过程了。虽然我已经让它们工作了,但我不确定我是否做得正确 - 即最好的方法。这是我的三个存储过程:TryAddTag、CheckTagExists 和 AddTag。
TryAddTag 是我的中间人,用于其他代码(例如 PHP 等)和其他两个过程之间的交互,因此这是被调用的那个过程。 TryAddTag
我的问题源于对@doesTagExist的使用。
这是使用其中一个变量的正确方式吗?或者,我如何使用一个DECLARE的变量来存储CheckTagExists在TryAddTag中的结果?我期望的是以下内容:
或类似的东西...
TryAddTag 是我的中间人,用于其他代码(例如 PHP 等)和其他两个过程之间的交互,因此这是被调用的那个过程。 TryAddTag
DELIMITER //
CREATE PROCEDURE TryAddTag(
IN tagName VARCHAR(255)
)
BEGIN
-- Check if tag already exists
CALL CheckTagExists(tagName, @doesTagExist);
-- If it does not exist, add it
IF @doesTagExist = FALSE THEN
CALL AddTag(tagName);
END IF;
END //
DELIMITER ;
AddTag
DELIMITER //
CREATE PROCEDURE AddTag(
IN tagName VARCHAR(255)
)
BEGIN
INSERT INTO
tags
VALUES(
NULL,
tagName
);
END //
DELIMITER ;
CheckTagExists
DELIMITER //
CREATE PROCEDURE CheckTagExists(
IN
tagName VARCHAR(255),
OUT
doesTagExist BOOL
)
BEGIN
-- Check if tag exists
SELECT
EXISTS(
SELECT
*
FROM
tags
WHERE
tags.NAME = tagName
)
INTO
doesTagExist;
END //
DELIMITER ;
我的问题源于对@doesTagExist的使用。
-- Check if tag already exists
CALL CheckTagExists(tagName, @doesTagExist);
这是使用其中一个变量的正确方式吗?或者,我如何使用一个DECLARE的变量来存储CheckTagExists在TryAddTag中的结果?我期望的是以下内容:
...
DECLARE doesTagExist BOOL;
SET doesTagExist = CheckTagExist('str');
...
或类似的东西...