今天开发报表遇到了ORA-22922: 不存在的 LOB 值问题,原因是用了wm_concat函数,转换后是clob类型,导致报表查询时报错。
后来改为使用listagg函数替代,完美解决问题,同时网上还有一种解决方法。新建一个自定义函数。

保存一下这个自定义函数
列转行的函数:

createorreplaceTYPEzh_concat_imAUTHIDCURRENT_USERASOBJECT(CURR_STRVARCHAR2(32767),STATICFUNCTIONODCIAGGREGATEINITIALIZE(SCTXINOUTzh_concat_im)RETURNNUMBER,MEMBERFUNCTIONODCIAGGREGATEITERATE(SELFINOUTzh_concat_im,P1INVARCHAR2)RETURNNUMBER,MEMBERFUNCTIONODCIAGGREGATETERMINATE(SELFINzh_concat_im,RETURNVALUEOUTVARCHAR2,FLAGSINNUMBER)RETURNNUMBER,MEMBERFUNCTIONODCIAGGREGATEMERGE(SELFINOUTzh_concat_im,SCTX2INzh_concat_im)RETURNNUMBER);/createorreplaceTYPEBODYzh_concat_imISSTATICFUNCTIONODCIAGGREGATEINITIALIZE(SCTXINOUTzh_concat_im)RETURNNUMBERISBEGINSCTX:=zh_concat_im(NULL);RETURNODCICONST.SUCCESS;END;MEMBERFUNCTIONODCIAGGREGATEITERATE(SELFINOUTzh_concat_im,P1INVARCHAR2)RETURNNUMBERISBEGINIF(CURR_STRISNOTNULL)THENCURR_STR:=CURR_STR||':'||P1;ELSECURR_STR:=P1;ENDIF;RETURNODCICONST.SUCCESS;END;MEMBERFUNCTIONODCIAGGREGATETERMINATE(SELFINzh_concat_im,RETURNVALUEOUTVARCHAR2,FLAGSINNUMBER)RETURNNUMBERISBEGINRETURNVALUE:=CURR_STR;RETURNODCICONST.SUCCESS;END;MEMBERFUNCTIONODCIAGGREGATEMERGE(SELFINOUTzh_concat_im,SCTX2INzh_concat_im)RETURNNUMBERISBEGINIF(SCTX2.CURR_STRISNOTNULL)THENSELF.CURR_STR:=SELF.CURR_STR||':'||SCTX2.CURR_STR;ENDIF;RETURNODCICONST.SUCCESS;END;END;/

函数:
create or replace FUNCTION zh_concat(P1 VARCHAR2)
RETURN VARCHAR2 AGGREGATE USING zh_concat_im ;
/