gpt4 book ai didi

Mysql 存储过程不返回 VARCHAR 输出参数

转载 作者:行者123 更新时间:2023-11-29 02:49:02 25 4
gpt4 key购买 nike

下面是我的存储过程。它工作正常,但我的问题是我无法将输出参数作为 VARCHAR

我遇到问题的部分是将 @curcName 分配给输出参数 op_resultMessage

BEGIN
SET op_resultMessage = @curcName;
END;

这是存储过程。

CREATE DEFINER=`root`@`localhost` PROCEDURE `addCurriculum`(    
IN p_curcName varchar(100),
IN p_description TEXT,
IN p_yearLevel VARCHAR(50),
IN p_syStart INT,
IN p_syEnd INT,
IN p_creator VARCHAR(50),
OUT op_resultMessage VARCHAR(50))
BEGIN

DECLARE curcName VARCHAR(20) ;

IF EXISTS
(SELECT @curcName := `name`
FROM curriculum
WHERE
yearLevel = p_yearLevel
AND syStart = p_syStart
AND syEnd = p_syEnd )

THEN --

BEGIN
SET op_resultMessage = @curcName;
END;

ELSE

BEGIN
INSERT INTO curriculum(`name`, description, yearLevel, syStart, syEnd, creator)
VALUES(p_curcName,p_description,p_yearLevel,p_syStart,p_syEnd,p_creator);
END;

END IF;

END

如果 name 存在,我正在尝试返回一条消息

所以它应该是这样的

SET op_resultMessage = @curcName 'already uses the school year and year level you're trying to insert';

但我不知道如何正确连接和分配值。我仍然对 := SET= 运算符感到困惑。我想这就是我遇到问题的地方。

如果我将输出参数的类型更改为 INT 之类的

OUT op_resultMessage VARCHAR(50)

然后给op_resultMessage分配一个数字,比如SET op_resultMessage = 1;

它返回数字 1 作为输出参数值。它只是不适用于 varchar。

所以当我尝试调用过程时

CALL `enrollmentdb`.`addCurriculum`
('Test Curriculum ','Test ','Grade 1',2015,2016,'jordan',@outputMsg);

SELECT @outputMsg; -- this doesn't return any value even if Grade 1, 2015 and 2016 exists

如果有任何帮助,我将不胜感激。其实最近才学mysql。

谢谢。

最佳答案

drop procedure if exists addCurriculum;
delimiter $$
CREATE PROCEDURE `addCurriculum`(
IN p_curcName varchar(100),
IN p_description TEXT,
IN p_yearLevel VARCHAR(50),
IN p_syStart INT,
IN p_syEnd INT,
IN p_creator VARCHAR(50),
OUT op_resultMessage VARCHAR(50))
BEGIN

DECLARE curcName VARCHAR(20) ;

SELECT `name` into @curcName
FROM curriculum
WHERE
yearLevel = p_yearLevel
AND syStart = p_syStart
AND syEnd = p_syEnd
LIMIT 1;
-- Note change above. When selecting into a variable (or more than 1)
-- then 0 or 1 rows can come back max or an Error occurs

IF @curcName is not null then
SET op_resultMessage = @curcName;
ELSE
BEGIN
INSERT INTO curriculum(`name`, description, yearLevel, syStart, syEnd, creator)
VALUES(p_curcName,p_description,p_yearLevel,p_syStart,p_syEnd,p_creator);
END;
SET op_resultMessage = 'GEEZ I am right here'; -- Drew added this
END IF;
END$$
delimiter ;

请注意存储过程中的注释,尤其是仅返回 0 或 1 行的部分,否则 select into var 模式将发生错误。所以 LIMIT 1。这可能是也可能不是您想要的行(限制 1),但这是它现在所在的位置。

关于Mysql 存储过程不返回 VARCHAR 输出参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38067467/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com