Oracle2PolarDB:Polardb-O兼容性之wm_concat
更新时间:
适用于
- 本文适用平台为公有云、专有云和一体机。
- PolarDB高度兼容Oracle版本,PolarDB的Release版本为20200228。
目的
PolarDB如何兼容Oracle的wm_concat函数。
解决办法
执行SQL出现如下报错信息,通过报错可以看出PolarDB中缺失wmsys.wm_concat
函数。
org.springframework.jdbc.UncategorizedSQLException: PreparedStatementCallback; uncategorized SQLException for SQL [SELECT min(a.task_name) task_name,a.op_time,min(decode(a.opinions,'','--',a.opinions)) opinions,wmsys.wm_concat(decode(b.sourcename||b.extname, '', '',b.sourcename||b.extname)) sourcename,min(b.downtime) downtime,min(b.extname) extname,min(a.optr_id||'('||c.personname||')') optr_id,min(a.next_deal||'('||d.personname||')') next_deal FROM tb_manualfee_task a LEFT JOIN tb_busiaudit_files b ON a.task_no=b.taskid LEFT JOIN tb_sys_person d ON a.next_deal=d.personid LEFT JOIN tb_sys_person c ON a.optr_id=c.personid WHERE a.case_no = ? GROUP BY op_time ORDER BY a.op_time ]; SQL state [3F000]; error code [0]; ERROR: schema "wmsys" does not exist Position: 97; nested exception is com.aliyun.polardb.util.PSQLException: ERROR: schema "wmsys" does not exist Position: 97
wm_concat函数说明
WM_CONCAT函数经常使用在行转列上,只能支持逗号分隔符。在12C版本之前,代码里这个函数用的会比较多,12C之后已经被禁用,由LISTAGG函数代替。
如何兼容wm_concat函数
在PolarDB中可以使用string_agg代替wm_concat,但必须指定分隔符。
\df STRING_AGG
List of functions
Schema | Name | Result data type | Argument data types | Type
------------+------------+------------------+---------------------+------
pg_catalog | string_agg | bytea | bytea, bytea | agg
pg_catalog | string_agg | text | text, text | agg
用string_agg替换wm_concat,将以下部分进行调整:
wmsys.wm_concat(decode(b.sourcename||b.extname, '', '',b.sourcename||b.extname))
调整后如下所示:
string_agg(decode(b.sourcename||b.extname, '', '',b.sourcename||b.extname),',')
反馈
- 本页导读
文档反馈