概述

listagg函数是Oracle 11g推出的一个分组函数,可以将字符串按分组连接起来.

SQL> select deptno ,listagg(ename,'->') within group (  order by ename)

2  from scott.emp

3  group by deptno;

DEPTNO LISTAGG(ENAME,'->')WITHINGROUP

------ --------------------------------------------------------------------------------

10 CLARK->KING->MILLER

20 ADAMS->FORD->JONES->SCOTT->SMITH

30 ALLEN->BLAKE->JAMES->MARTIN->TURNER->WARD

需要注意的是listagg函数只能返回VARCHAR2和rac类型的值.

The return data type is RAW if the measure column is RAW; otherwise the return value is VARCHAR2.(以上内容摘自官方文档)

varcahr2最多可以容纳4000个字符具体内容参见

#ORA-01489: result of string concatenation is too long

如果我们运行下面的程序则会触发ORA-01489错误

SQL> select listagg(rownum,'->') within group (  order by rownum)

2  from  dual

3  connect by  level <=1000 ;

select listagg(rownum,'->') within group (  order by rownum)

from  dual

connect by  level <=1000

ORA-01489: result of string concatenation is too long

我们来看一下ORA-01489这个报错的详细信息

[oracle@server ~]$ oerr ora 1489

01489, 00000, "result of string concatenation is too long"

// *Cause: String concatenation result is more than the maximum size.

原因:字符串连接结果超出了最大尺寸

// *Action: Make sure that the result is less than the maximum size.

而Oracle中能存储字符串最多的数据类型为CLOB.所以需要我们自写函数解这个问题

自定义聚集函数

对象声明部分

createor replace type dao_connect_impl as object

(

RES clob,

static function ODCIAggregateInitialize(sctx IN OUT dao_connect_impl)

returnnumber,

member function ODCIAggregateIterate(self IN OUT dao_connect_impl,

value IN VARCHAR2) returnnumber,

member function ODCIAggregateTerminate(self IN dao_connect_impl,

returnValue OUT clob, flags INNUMBER) returnnumber,

member function ODCIAggregateMerge(self IN OUT dao_connect_impl,

ctx2 IN dao_connect_impl) returnnumber

)

对象实现部分

createor replace type body dao_connect_impl is

staticfunction ODCIAggregateInitialize(sctx IN OUT dao_connect_impl)

returnnumberis

begin

sctx := dao_connect_impl(null);

return ODCIConst.Success;

end;

member function ODCIAggregateIterate(self IN OUT dao_connect_impl, value IN VARCHAR2) return number is

begin

SELF.RES :=SELF.RES||','||VALUE ;

return ODCIConst.Success;

end;

member function ODCIAggregateTerminate(self IN dao_connect_impl,

returnValue OUT clob, flags IN number) return number is

begin

returnValue := ltrim(self.RES,',');

return ODCIConst.Success;

end;

member function ODCIAggregateMerge(self IN OUT dao_connect_impl, ctx2 IN dao_connect_impl) return number is

begin

null;

return ODCIConst.Success;

end;

end;

函数声明与授权

SQL> CREATE OR REPLACE FUNCTION dao_concat (input varchar2) RETURN clob

2  PARALLEL_ENABLE AGGREGATE USING dao_connect_impl;

3  /

Function created

SQL> grant execute on dao_concat to public ;

SQL> create public synonym dao_concat for dao.dao_concat ;

Synonym created.

调用

SQL> set pagesize 20000

SQL> set long20000

SQL> select replace(dao_concat(rownum) ,',','->')

2  from  dual

connect by  level <=1000 ;

3

REPLACE(DAO_CONCAT(ROWNUM),',','->')

--------------------------------------------------------------------------------

1->2->3->4->5->6->7->8->9->10->11->12->13->14->15->16->17->18->19->20->21->22->2

3->24->25->26->27->28->29->30->31->32->33->34->35->36->37->38->39->40->41->42->4

3->44->45->46->47->48->49->50->51->52->53->54->55->56->57->58->59->60->61->62->6

3->64->65->66->67->68->69->70->71->72->73->74->75->76->77->78->79->80->81->82->8

3->84->85->86->87->88->89->90->91->92->93->94->95->96->97->98->99->100->101->102

->103->104->105->106->107->108->109->110->111->112->113->114->115->116->117->118

->119->120->121->122->123->124->125->126->127->128->129->130->131->132->133->134

->135->136->137->138->139->140->141->142->143->144->145->146->147->148->149->150

->151->152->153->154->155->156->157->158->159->160->161->162->163->164->165->166

->167->168->169->170->171->172->173->174->175->176->177->178->179->180->181->182

->183->184->185->186->187->188->189->190->191->192->193->194->195->196->197->198

->199->200->201->202->203->204->205->206->207->208->209->210->211->212->213->214

->215->216->217->218->219->220->221->222->223->224->225->226->227->228->229->230

->231->232->233->234->235->236->237->238->239->240->241->242->243->244->245->246

->247->248->249->250->251->252->253->254->255->256->257->258->259->260->261->262

->263->264->265->266->267->268->269->270->271->272->273->274->275->276->277->278

->279->280->281->282->283->284->285->286->287->288->289->290->291->292->293->294

->295->296->297->298->299->300->301->302->303->304->305->306->307->308->309->310

->311->312->313->314->315->316->317->318->319->320->321->322->323->324->325->326

->327->328->329->330->331->332->333->334->335->336->337->338->339->340->341->342

->343->344->345->346->347->348->349->350->351->352->353->354->355->356->357->358

->359->360->361->362->363->364->365->366->367->368->369->370->371->372->373->374

->375->376->377->378->379->380->381->382->383->384->385->386->387->388->389->390

->391->392->393->394->395->396->397->398->399->400->401->402->403->404->405->406

->407->408->409->410->411->412->413->414->415->416->417->418->419->420->421->422

->423->424->425->426->427->428->429->430->431->432->433->434->435->436->437->438

->439->440->441->442->443->444->445->446->447->448->449->450->451->452->453->454

->455->456->457->458->459->460->461->462->463->464->465->466->467->468->469->470

->471->472->473->474->475->476->477->478->479->480->481->482->483->484->485->486

->487->488->489->490->491->492->493->494->495->496->497->498->499->500->501->502

->503->504->505->506->507->508->509->510->511->512->513->514->515->516->517->518

->519->520->521->522->523->524->525->526->527->528->529->530->531->532->533->534

->535->536->537->538->539->540->541->542->543->544->545->546->547->548->549->550

->551->552->553->554->555->556->557->558->559->560->561->562->563->564->565->566

->567->568->569->570->571->572->573->574->575->576->577->578->579->580->581->582

->583->584->585->586->587->588->589->590->591->592->593->594->595->596->597->598

->599->600->601->602->603->604->605->606->607->608->609->610->611->612->613->614

->615->616->617->618->619->620->621->622->623->624->625->626->627->628->629->630

->631->632->633->634->635->636->637->638->639->640->641->642->643->644->645->646

->647->648->649->650->651->652->653->654->655->656->657->658->659->660->661->662

->663->664->665->666->667->668->669->670->671->672->673->674->675->676->677->678

->679->680->681->682->683->684->685->686->687->688->689->690->691->692->693->694

->695->696->697->698->699->700->701->702->703->704->705->706->707->708->709->710

->711->712->713->714->715->716->717->718->719->720->721->722->723->724->725->726

->727->728->729->730->731->732->733->734->735->736->737->738->739->740->741->742

->743->744->745->746->747->748->749->750->751->752->753->754->755->756->757->758

->759->760->761->762->763->764->765->766->767->768->769->770->771->772->773->774

->775->776->777->778->779->780->781->782->783->784->785->786->787->788->789->790

->791->792->793->794->795->796->797->798->799->800->801->802->803->804->805->806

->807->808->809->810->811->812->813->814->815->816->817->818->819->820->821->822

->823->824->825->826->827->828->829->830->831->832->833->834->835->836->837->838

->839->840->841->842->843->844->845->846->847->848->849->850->851->852->853->854

->855->856->857->858->859->860->861->862->863->864->865->866->867->868->869->870

->871->872->873->874->875->876->877->878->879->880->881->882->883->884->885->886

->887->888->889->890->891->892->893->894->895->896->897->898->899->900->901->902

->903->904->905->906->907->908->909->910->911->912->913->914->915->916->917->918

->919->920->921->922->923->924->925->926->927->928->929->930->931->932->933->934

->935->936->937->938->939->940->941->942->943->944->945->946->947->948->949->950

->951->952->953->954->955->956->957->958->959->960->961->962->963->964->965->966

->967->968->969->970->971->972->973->974->975->976->977->978->979->980->981->982

->983->984->985->986->987->988->989->990->991->992->993->994->995->996->997->998

->999->1000

oracle ora32771,listagg函数 ORA-01489: result of string concatenation is too long的解决办法相关推荐

  1. oracle11g ora 29927,listagg函数 ORA-01489 result of string concatenation is too long的解决办法 【博森瑞】...

    listagg函数 ORA-01489: result of string concatenation is too long的解决办法 概述 listagg 函数是Oracle 11g推出的一个分组 ...

  2. oracle的listagg函数

    今天需要将 BDST_ID相同的PROJECT_ID用逗号分隔拼成一个字符串,于是想到了oracle的listagg函数 表名为PM_BDST_PROJECT select tt.BDST_ID, l ...

  3. oracle的concat字符串太长,oracle 使用listagg函数后 字符串连接的结果过长

    oracle 使用listagg函数后 字符串连接的结果过长最终解决 SELECT r.department_id law_dept_id, ( SELECT xmlagg(xmlparse(cont ...

  4. [Oracle] “表中有数据,但select count(*)的结果为0”问题的解决办法

    [Oracle] "表中有数据,但select count(*)的结果为0"问题的解决办法 参考文章: (1)[Oracle] "表中有数据,但select count( ...

  5. 12 c for. oracle rac,【案例】Oracle RAC FOR AIX搭建执行root.sh时两次报错的解决办法

    天萃荷净 运维DBA反映在aix 5.3 ml6安装10.2.0.1 rac报错0509-036 Cannot load program crsctl.bin because of the follo ...

  6. cmd使用另一个Oracle的sid,(转发备用)Oracle SID在本机上已经存在,请指定一个不同的SID”的解决办法...

    (转发备用)Oracle SID在本机上已经存在,请指定一个不同的SID"的解决办法 (2014-04-30 10:57:17) 1. 开始->设置->控制面板->管理工具 ...

  7. Oracle的 wm_concat 的排序问题,Oracle的 listagg 函数[转]

    一大早来广图排了大半个钟的队,总算占了个好位子.--2018-07-28 1.环境: 1.操作系统 windows 10 2.数据库:Oracle Database 11g r2 2.需求: 还是看例 ...

  8. Oracle的 wm_concat 的排序问题,Oracle的 listagg 函数

    一大早来广图排了大半个钟的队,总算占了个好位子.--2018-07-28 1.环境: 1.操作系统 windows 10 2.数据库:Oracle Database 11g r2 2.需求: 还是看例 ...

  9. Oracle的 listagg 函数,多行合并一行

    转自:https://blog.csdn.net/Huay_Li/article/details/81257655 --创建学校类型-年级表 create table SchoolGrade(scho ...

最新文章

  1. setAttibute和getParameter的区别
  2. golang mysql 事务_golang的嵌套事务管理-Go语言中文社区
  3. 大话设计模式—桥接模式
  4. 【AI视野·今日CV 计算机视觉论文速览 第227期】Fri, 25 Jun 2021
  5. “mysql数据库表锁死,既打不开,也关不上”的解决方案
  6. WIN7下安装SVNserver端及client搭建协作环境
  7. spring-boot使用教程(一):让程序跑起来
  8. PHP中的Traits用法详解
  9. Centos Linux 下Pycharm 安装
  10. 图解通信原理与案例分析-14:“大哥大”与1G模拟蜂窝移动通信案例--频率调制与频分多址FDMA
  11. Word 标题后自动添加分页符、分节符显示与查看
  12. 饥荒服务器物品指令,流年饥荒控制台指令全+物品大全+服务器管理命令大全.docx...
  13. 世界5G大会 大兴机场 随记
  14. uc7.5java下载,uc浏览器7.5版手机下载-uc浏览器7.5官方版v7.5 安卓版 - 极光下载站...
  15. 学习笔记——共阳数码管的静态显示
  16. Neutron OVS-DVR
  17. 京东上千页面搭建基石——CMS前后端分离演讲史读后感
  18. Lesson 11:聚类分析
  19. Android开发高手课笔记 - 01 崩溃优化(上):关于“崩溃”那点事
  20. 页面js打开 qq客户端对话框(已测试)

热门文章

  1. 中间凹陷的 BottomNavigationView
  2. RL78/F13 在E2 studio(GCC)上的FLASH(FDL)读写应用
  3. 我是“坚守者”还是背叛者?
  4. 2个阶乘什么意思_2的阶乘的阶乘是什么啊?就是2!!代表的什么意思?怎样计算?谢谢...
  5. CSS之设置超链接样式以及设置鼠标形状
  6. photo-sphere-viewer 全景图Vr 720全景查看(vue篇)
  7. Android 集成百度地图AR识别SDK(一)
  8. PostgreSQL:WAL日志归档策略
  9. 机器学习中的马尔可夫随机场模型
  10. 窗口看门狗 WWDG