为什么输出仅是最后一个值? Oracle循环游标

时间:2018-08-30 23:14:20

标签: oracle loops cursor

我正在尝试通过按功能参数接收教授的ID并显示所有课程(每个课程用逗号分隔)来输出教授的课程列表。例如,如果一位教授教授人文,科学和数学,我希望输出为:“人文,科学,数学”。但是,我得到的只是“数学”。它只会显示找到的与教授ID匹配的最后一个字段。

CREATE OR REPLACE FUNCTION listar_cursos(prof NUMBER) RETURN VARCHAR
IS
    CURSOR C1 IS
        SELECT subject.name AS name FROM subject
               INNER JOIN course_semester 
               ON subject.id = course_semester.id_subject
        WHERE  course_semester.id_profesor = prof
        ORDER BY subject.name;

    test VARCHAR(500);
BEGIN
    FOR item IN C1
    LOOP
        test:= item.name ||',';
    END LOOP;

    RETURN test;
END;
/

我知道listagg存在,但是我不想使用它。

1 个答案:

答案 0 :(得分:1)

在循环中,您重新分配给it('should', async(() => { spyOn(component, 'myFunction') // ???? })); 变量,而不是附加到变量。这就是为什么在循环结束时,它将仅保留test的最后一个值。

作业应类似

item.name

还请注意,这将在字符串的开头保留逗号。您可能不想返回test := test || ',' || item.name ,而不是返回test

请注意,您不需要显式声明游标。如下所示,使用隐式游标,代码更易于阅读(我认为)。我创建了示例表和数据来测试该功能,然后展示了功能代码及其用法。

ltrim(test, ',')