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
一起使用,但请确保将此查询放入函数中,因为如果单独执行,它将抛出错误。太好了!!!坚持下去。