ORACLE ORA-01489: 字符串连接的结果过长 错误的原因以及解决办法

如下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语法解决

猜你喜欢

转载自blog.csdn.net/qq_39008613/article/details/103352050