Listagg 结果绑定变量

Listagg result binding variable

我有这个查询 select LISTAGG(id, ',') WITHIN GROUP (ORDER BY id) as "id_no" from student_all

它正在工作,但我想在变量中使用结果,所以我这样写了这个查询

select LISTAGG(id, ',') WITHIN GROUP (ORDER BY id) into a_value  from student_all

但它不起作用。我的错误是缺少关键字。

我也想为测试写一个函数,但同样error.I没有创建函数。

CREATE OR REPLACE
 FUNCTION list_id(
   periods     IN NUMBER,
   p_student_id      IN  NUMBER)
   RETURN VARCHAR2
  AS
    str VARCHAR2(200);
  BEGIN
    SELECT LISTAGG(id, ',') WITHIN GROUP (
    ORDER BY  id DESC)
    INTO str
   FROM student_all
   WHERE status = 'IN' AND id = p_student_id  FETCH FIRST periods ROWS ONLY 
   RETURN str;
 END;
 

你有什么想法吗?

您的代码存在多个问题。

  • SELECT 语句末尾缺少分号
  • FETCH 子句使用不当。

我认为您正在寻找仅获取几行然后执行 LISTAGG 的代码。您可以使用以下代码。

SELECT LISTAGG(id, ',') WITHIN GROUP (ORDER BY  id DESC)
  INTO str
FROM (SELECT ID
        FROM student_all
       WHERE status = 'IN' 
         AND id = p_student_id  
      ORDER BY ID
      FETCH FIRST periods ROWS ONLY);