(返回值为Collection类型)
4) 通过Table类型和自定义函数实现需求目标
SELECT e.emi_current_handler,
(SELECT listagg(p.pn_name, ',') within
GROUP(
ORDER BY p.id)
FROM person p
where p.id in
(select column_value
from table(split(e.emi_current_handler, ',')))) USER_NAME
FROM env_maintenance_info e
where e.emi_current_handler is not null
and instr(e.emi_current_handler, ',') > 0;
解释说明
自定义split函数:
该函数有两个参数,第一个参数为要处理的字符串,第二个参数为要分割的方式。灵活的支持业务表多种形式的分割,列:“,”、“|”、“&”、“_”...
listagg函数:
Oracle19C版本后因wm_concat函数效率过低已废弃,可以通过listagg函数来实现行转列的需求。
wm_concat与listagg对比:
1) wm_concat性能略差
2) wm_concat使用后为CLOB字段需要to_char转换
3) listagg可以自定义排序方式、以及拼接方式
4) listagg性能优于wm_concat
5) 两者都有长度限制