Sql Listagg结果绑定变量

Sql Listagg结果绑定变量,sql,oracle,listagg,Sql,Oracle,Listagg,我有一个查询从student\u all中选择组(按id排序)中的listag(id,,)作为“id\u no” 它正在工作,但我想在变量中使用result,所以我像这样编写了这个查询 select LISTAGG(id, ',') WITHIN GROUP (ORDER BY id) into a_value from student_all 但它不起作用。我的错误是缺少关键字 我还想为测试编写一个函数,但同样的错误是,我没有创建函数 CREATE OR REPLACE FUNCTION

我有一个查询
从student\u all
中选择组(按id排序)中的listag(id,,)作为“id\u no”

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

select LISTAGG(id, ',') WITHIN GROUP (ORDER BY id) into a_value  from student_all
但它不起作用。我的错误是缺少关键字

我还想为测试编写一个函数,但同样的错误是,我没有创建函数

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
    子句未正确使用
我认为您正在寻找只获取几行的代码,然后执行
listag
。您可以使用以下代码

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);

仅行
子句后面加一个分号(我假设您的DB版本是12c+,不是吗?)。顺便说一句,str(200)的长度可能很短,可能会被32767替换。您使用哪个Oracle版本?我使用19cedition@BarbarosÖzhan我试过了,但不起作用。除了我已经提到的一个,没有问题。它给出了缺少的关键字。我想我不能将into子句与listagg一起使用。你肯定可以将
into
listagg
一起使用,但请确保将此查询放入函数中,因为如果单独执行,它将抛出错误。太好了!!!坚持下去。