我有一个返回 varchar 值的 mysql 函数。在这个函数中,我定义了一个仅给出单个值的游标。这意味着在我的 select 语句中,我使用表主键组合获取了特定值。因为我知道这个游标只返回一个值,所以我不想添加一个循环来检查游标是否返回一个值。
DELIMITER //
CREATE FUNCTION PROGRAM_API_Get_Name(
program_id_ VARCHAR(15),
uni_id_ VARCHAR(15),
fac_id_ VARCHAR(15)) RETURNS VARCHAR(100)
BEGIN
DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE;
DECLARE degree_name_ VARCHAR(100);
DECLARE get_name_ CURSOR FOR
SELECT program_name
FROM degree_program_tab
WHERE program_id = program_id_
AND uni_id = uni_id_
AND fac_id = fac_id_;
OPEN get_name_;
IF(!done) THEN
FETCH get_name_ INTO degree_name_;
CLOSE get_name_;
RETURN degree_name_;
END IF;
RETURN NULL;
END//
这个函数给了我以下错误
Error Code: 1064. You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'BEGIN DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE; ' at line 5 0.
如果你知道如何克服这个问题,请帮助我
最佳答案
我找到了这个问题的答案,
cursor.rowcount
是解决方案
DELIMITER //
CREATE FUNCTION PROGRAM_API_Get_Name(
program_id_ VARCHAR(15),
uni_id_ VARCHAR(15),
fac_id_ VARCHAR(15)) RETURNS VARCHAR(100)
BEGIN
DECLARE degree_name_ VARCHAR(100);
DECLARE get_name_ CURSOR FOR
SELECT program_name
FROM degree_program_tab
WHERE program_id = program_id_
AND uni_id = uni_id_
AND fac_id = fac_id_;
OPEN get_name_;
IF(get_name_.rowcount>0) THEN
FETCH get_name_ INTO degree_name_;
CLOSE get_name_;
RETURN degree_name_;
END IF;
RETURN NULL;
END//
关于mysql - 如何在不使用循环的情况下检查mysql游标结果为空,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37894490/