小编Kvn*_*n91的帖子

MySQL过程的游标在第一次迭代后停止

我正在编写一个程序,该程序获取一个数据表以映射一个字段并在另一个表中插入/更新。

我的问题是,如果映射函数找不到任何匹配项,则光标将在第一次迭代后停止,而不会引发任何错误。

这是我的功能:

BEGIN
    DECLARE mapped_name VARCHAR(255);   

    SELECT mapped_field INTO mapped_name
        FROM mapping_civility
        WHERE original_field = nameVar
    LIMIT 1;

    IF mapped_name IS NULL THEN
        RETURN 'INDEFINI';
    ELSE
        RETURN mapped_name;
    END IF;
END
Run Code Online (Sandbox Code Playgroud)

通过测试,我发现如果我的映射表中有一个对应的字段,它可以工作,但是如果SELECT由于找不到映射的字段而返回NULL值,它将在第一次迭代时停止游标。

然后我在另一个数据库,另一个服务器上进行了尝试,一切都正常,所以可能是配置问题?两者都有字符集“ latin1-cp1252西欧”,排序规则为“ latin1_swedish_ci”。

这是我的过程代码:

    BLOCK1: BEGIN
    DECLARE no_more_rows1 INT;
    DECLARE my_name VARCHAR(255);
    DECLARE civility VARCHAR(255);

    DECLARE curseur1 CURSOR FOR
        SELECT `name`
        FROM source;

    DECLARE CONTINUE handler FOR NOT FOUND SET no_more_rows1 = TRUE;

    OPEN curseur1;
    LOOP1: LOOP
        FETCH curseur1 INTO my_name;
        IF no_more_rows1 THEN
            CLOSE curseur1;
            LEAVE …
Run Code Online (Sandbox Code Playgroud)

mysql sql stored-procedures function cursor

5
推荐指数
1
解决办法
1700
查看次数

标签 统计

cursor ×1

function ×1

mysql ×1

sql ×1

stored-procedures ×1