mysql - 如何在不使用循环的情况下检查mysql游标结果为空

标签 mysql function

我有一个返回 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/

相关文章:

c++ - 未在范围内声明的变量错误/函数参数太少

python - Thead.join() 仅在所有线程完成后才帮助打印字符串

JQuery 从下拉列表选择中打开 div 标签

mysql - 如何在一个过程中处理多个游标?

mysql - 使用别名锁定多个表不起作用

mysql - 如何建立具有多个一对多关系的数据库?使用数据透视表或连接表?

c - 数组指针作为参数传递给其他函数时会更改值

javascript - 函数作为对象和函数调用

php - 如何将两张表合并起来,用一个名字来调用。 [代码点火器]

mysql查询订单已支付的列表