我正在尝试通过按功能参数接收教授的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存在,但是我不想使用它。
答案 0 :(得分:1)
在循环中,您重新分配给it('should', async(() => {
spyOn(component, 'myFunction')
// ????
}));
变量,而不是附加到变量。这就是为什么在循环结束时,它将仅保留test
的最后一个值。
作业应类似
item.name
还请注意,这将在字符串的开头保留逗号。您可能不想返回test := test || ',' || item.name
,而不是返回test
。
请注意,您不需要显式声明游标。如下所示,使用隐式游标,代码更易于阅读(我认为)。我创建了示例表和数据来测试该功能,然后展示了功能代码及其用法。
ltrim(test, ',')