暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Oracle 如何连接长度大于4000个字符的字符串

askTom 2017-12-12
522

问题描述

我正在使用xmlagg函数连接带有逗号分隔值的记录。但是当列数大于300时,我收到错误

我得到以下错误

Error starting at line : 8 in command -
select 
   rtrim (xmlagg (xmlelement (e, COLUMN_NAME || ',')).extract ('//text()'), ',') COLUMN_NAMES
   from user_tab_columns where TABLE_NAME = 'REFCLIENT'

Error report -
ORA-19011: Character string buffer too small


还有其他方法可以解决此错误吗?

专家解答

你有几个选择:

1.将max_string_size参数设置为extended
2.通过将数据提取为clob来避免隐式转换为varchar2

max_string_size

从12.1开始,您可以将SQL中的varchar2的最大长度增加到32,767。为此,您需要设置max_string_size = extended。

它不像运行alter系统那样简单。有关如何执行此操作的说明,请阅读:

https://oracle-base.com/articles/12c/extended-data-types-12cR1

Extract as clob

当然,所有使用扩展数据类型的真正做的是移动点,你击中错误。为了完全避免它,通过调用getClobVal将xmlagg的输出显式转换为clob:

select rtrim( 
         xmlagg( 
           xmlelement( e,column_name || ',' ) 
         ).extract( '//text()').getClobVal(),
         ',' 
       ) column_names
from   user_tab_columns;

COLUMN_NAMES                                                                       
DOC,CITY,OLYMPIC_YEAR,SPORT,DISCIPLINE,ATHLETE,NOC,GENDER,EVENT,EVENT_GENDER,...


或者,如果您只是想避免错误并且不需要整个字符串,则可以在12.2中使用listagg的 “on overflow truncate” 子句:

select listagg(column_name, ',' on overflow truncate) 
         within group (order by table_name, column_id) cols
from   user_tab_columns;

COLS                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              
ID,JUNK,ID,I,A,B,ID,NAME,TOY_ID,TOY_NAME,COLOUR,IS_DELETED,QUEUE,MSG_ID,...

「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论