怎么在Oracle12C数据库创建wm_concat函数
本篇内容介绍了“怎么在Oracle12C数据库创建wm_concat函数”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!
一、用sys用户以SYSDBA身份登录数据库,执行以下命当我们的程序需要连接12C数据库时,原本使用wm_concat函数的地方会出现报错,这是由于12C已经摒弃了wm_concat这个函数,可以采取的办法有使用listagg函数代替wm_concat函数,但是程序中所有涉及wm_concat函数的地方都得改成listagg函数的写法,所以为了减小修改程序的工作量,可以通过手工创建wm_concat函数来解决这个问题。
CREATEORREPLACETYPEWM_CONCAT_IMPLASOBJECT--AUTHIDCURRENT_USERASOBJECT(CURR_STRVARCHAR2(32767),STATICFUNCTIONODCIAGGREGATEINITIALIZE(SCTXINOUTWM_CONCAT_IMPL)RETURNNUMBER,MEMBERFUNCTIONODCIAGGREGATEITERATE(SELFINOUTWM_CONCAT_IMPL,P1INVARCHAR2)RETURNNUMBER,MEMBERFUNCTIONODCIAGGREGATETERMINATE(SELFINWM_CONCAT_IMPL,RETURNVALUEOUTVARCHAR2,FLAGSINNUMBER)RETURNNUMBER,MEMBERFUNCTIONODCIAGGREGATEMERGE(SELFINOUTWM_CONCAT_IMPL,SCTX2INWM_CONCAT_IMPL)RETURNNUMBER);/
--定义类型bodyCREATEORREPLACETYPEBODYWM_CONCAT_IMPLISSTATICFUNCTIONODCIAGGREGATEINITIALIZE(SCTXINOUTWM_CONCAT_IMPL)RETURNNUMBERISBEGINSCTX:=WM_CONCAT_IMPL(NULL);RETURNODCICONST.SUCCESS;END;MEMBERFUNCTIONODCIAGGREGATEITERATE(SELFINOUTWM_CONCAT_IMPL,P1INVARCHAR2)RETURNNUMBERISBEGINIF(CURR_STRISNOTNULL)THENCURR_STR:=CURR_STR||','||P1;ELSECURR_STR:=P1;ENDIF;RETURNODCICONST.SUCCESS;END;MEMBERFUNCTIONODCIAGGREGATETERMINATE(SELFINWM_CONCAT_IMPL,RETURNVALUEOUTVARCHAR2,FLAGSINNUMBER)RETURNNUMBERISBEGINRETURNVALUE:=CURR_STR;RETURNODCICONST.SUCCESS;END;MEMBERFUNCTIONODCIAGGREGATEMERGE(SELFINOUTWM_CONCAT_IMPL,SCTX2INWM_CONCAT_IMPL)RETURNNUMBERISBEGINIF(SCTX2.CURR_STRISNOTNULL)THENSELF.CURR_STR:=SELF.CURR_STR||','||SCTX2.CURR_STR;ENDIF;RETURNODCICONST.SUCCESS;END;END;/
--自定义函数列表CREATEORREPLACEFUNCTIONwm_concat(P1VARCHAR2)RETURNVARCHAR2AGGREGATEUSINGWM_CONCAT_IMPL;/二、创建同义词并授权
createpublicsynonymWM_CONCAT_IMPLforsys.WM_CONCAT_IMPL/createpublicsynonymwm_concatforsys.wm_concat/grantexecuteonWM_CONCAT_IMPLtopublic/grantexecuteonwm_concattopublic/
“怎么在Oracle12C数据库创建wm_concat函数”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注亿速云网站,小编将为大家输出更多高质量的实用文章!
声明:本站所有文章资源内容,如无特殊说明或标注,均为采集网络资源。如若本站内容侵犯了原著者的合法权益,可联系本站删除。