oracle select 转一行,ORACLE 多行转一行函数WMSYS.WM_CONCAT和LISTAGG的使用

WMSYS.WM_CONCAT缺点:

1、WMSYS.WM_CONCAT是非公开函数,它的用户是WMSYS,而不是SYS或者SYSTEM.

2、大量使用WM_CONCAT函数也会导致临时表空间爆满,这是因为返回类型为CLOB,CLOB占用的临时表空间只有在连接释放后才会释放.

3、ORACLE12G后不支持该函数的使用

WMSYS.WM_CONCAT 使用:

SELECT TABLE_NAME,COLUMN_NAME,COLUMN_ID

FROM USER_TAB_COLUMNS

WHERE TABLE_NAME = 'TEST_LA';--表名可根据实际情况替换

dd7399df4ef54e0296404839d2396ff2.png

SELECT TABLE_NAME,WM_CONCAT(COLUMN_NAME)

FROM USER_TAB_COLUMNS

WHERE TABLE_NAME = 'TEST_LA'

GROUP BY TABLE_NAME;

fb433b4c85ba1f67bc4e6b60ba6f6c6e.png

SELECT TABLE_NAME,TO_CHAR(WM_CONCAT(COLUMN_NAME))

FROM USER_TAB_COLUMNS

WHERE TABLE_NAME = 'TEST_LA'

GROUP BY TABLE_NAME;

fb433b4c85ba1f67bc4e6b60ba6f6c6e.png

WMSYS.WM_CONCAT 在 10.2.0.4版本以前是 VARCHAR2 类型,但是 从 10.2.0.5 开始,是 CLOB 类型

ORACLE12G后可使用LISTAGG函数代替。

Oracle 11g Release 2介绍了LISTAGG 函数,使得聚集连接字符串变得很容易。并且允许使用我们指定连接串中的字段顺序

LISTAGG函数用法:

7ffcca9c4204fe2a9ffd9259f04c171b.png

LISTAGG根据order by子句对列值进行排序,将排序后的结果拼接起来。

measure_expr:可以是任何基于列的表达式。

delimiter:分隔符,默认为NUL

order_by_clause:order by子句决定了列值被拼接的顺序。

通过该用法,可以看出LISTAGG函数不仅可作为一个普通函数使用,也可作为分析函数。

LISTAGG函数使用:

SELECT TABLE_NAME,LISTAGG(COLUMN_NAME, ',') WITHIN GROUP(ORDER BY COLUMN_ID) AS ALL_COLUMN

FROM USER_TAB_COLUMNS

WHERE TABLE_NAME = 'TEST_LA'

GROUP BY TABLE_NAME;

6db1e2293f9f541384757c6f5a8d96fb.png

效果同WM_CONCAT函数。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值