如下sql,使用listagg进行分组拼接时,常常会报 ora-01489 错误,造成该报错的主要原因是:oracle对字符变量的长度限制,正常情况下,oracle定义的varchar2类型变量的长度不应超过4000字节,如有必要可转换为long 或clob类型。
解决方案:
方法一:自定义连接函数(通过函数进行转)
-- 自定义一个 tab_varchar2数据类型
CREATE
TYPE tab_varchar2
AS
TABLE
OF
VARCHAR2(4000);
-- 新建 concat_array 函数
CREATE
OR
REPLACE
FUNCTION
concat_array(p tab_varchar2)
RETURN
CLOB
IS
l_result CLOB;
BEGIN
FOR
cc
IN
(
SELECT
column_value
FROM
TABLE
(p)
ORDER
BY
column_value) LOOP
l_result := l_result ||
' '
|| cc.column_value;
END
LOOP;
return
l_result;
END
;
以上函数直接执行就可以了
然后在进行查询返回的就是CLOB字段
方法二:
可以使用xmlagg + xmlparse语法解决,