首页 > 数据库 >oracle数据库listagg、wm_concat、xmlagg的用法

oracle数据库listagg、wm_concat、xmlagg的用法

时间:2024-04-12 16:12:44浏览次数:10  
标签:listagg column expr wm oracle xmlagg concat

1.listagg

LISTAGG (measure_expr:any [, delimiter_expr:VARCHAR]) WITHIN GROUP (ORDER BY column_expr ASC/DESC)

语法注解
LISTAGG函数一般配合GROUP BY作为聚合函数(也可用于开窗函数)使用,可以传入两个参数变量
measure_expr: 要合并处理的字段
delimiter_expr: 给定分隔符号
column_expr: 排序字段

举例:

-- 根据user_tab_cols按column_id拼接某个表的字段
SELECT
	listagg(column_name, ',') WITHIN GROUP (ORDER BY column_id)
FROM
	user_tab_cols
WHERE
	table_name = 'USER';

2.wm_concat

wm_concat语法比较简单,直接在括号里面写入要接着的字段就行了,在oracle11g以后,oracle官方引入了listagg函数取代wm_conat函数,listagg可以指定分隔符,指定排序

举例:

SELECT
	wm_concat(column_name)
FROM
	user_tab_cols
WHERE
	table_name = 'USER';

3 xmlagg

数据量超出4000时,用listagg或wm_concat会报错,可以使用xmlagg,语法如下:

xmlagg(xmlparse(content 合并字段||’,’ wellformed) order by 排序字段).getclobval()

拼接出来的语句,最后会多一个“,”,可以使用substr截取字符串和length计算字符长度配合使用

举例:

select substr(xmlagg(xmlparse(content SECTION_NO || ',' wellformed) order by SPS_ID)
              .getclobval(),
              0,
              length(xmlagg(xmlparse(content SECTION_NO || ',' wellformed) order by SPS_ID)
                     .getclobval()) - 1) SECTION_NO
  from REAL_PROJ_SECTION

标签:listagg,column,expr,wm,oracle,xmlagg,concat
From: https://www.cnblogs.com/fuguanghe/p/18131524

相关文章

  • Oracle关于半连接SQL执行计划的执行路径一些有趣的实验
     Oracle关于半连接SQL执行计划的执行路径一些有趣的实验 从摩天轮的问答里边看到的一个问题,https://www.modb.pro/issue/34573大概有这么条SQL(包括环境构造语句),如何强制走出nestedloops的执行路径。createtabletb1asselect*fromdba_objects;createtabletb2as......
  • Oracle 实现多语言(即根据用户登录的环境自适应本地语言)
    CREATEORREPLACEPACKAGEBODYOADBA.db_globalIS--設定參數值PROCEDUREset_value(parameterVARCHAR2,valVARCHAR2)ISBEGINDBMS_SESSION.set_context('db_context',parameter,val);ENDset_value;--取得參數值FUNCTION......
  • 从 Oracle 到 MySQL 数据库的迁移之旅
    目录引言一、前期准备工作1.搭建新的MySQL数据库2.建立相应的数据表2.1数据库兼容性分析2.1.1字段类型兼容性分析2.1.2函数兼容性分析2.1.3是否使用存储过程?存储过程的个数?复杂度?2.1.4是否使用触发器?个数?使用的场景?2.2建表过程中其他需要注意的事项3.为项目配置Oracle和MyS......
  • MySQL 06 mysql 如何实现类似 oracle 的 merge into
    拓展阅读MySQLViewMySQLtruncatetable与delete清空表的区别和坑MySQLRulermysql日常开发规范MySQLdatetimetimestamp以及如何自动更新,如何实现范围查询MySQL06mysql如何实现类似oracle的mergeintoMySQL05MySQL入门教程(MySQLtutorialbook)MySQL04-E......
  • 解析oracle的DDL语句生成高斯内表及表字段主键配置
    oracle的DDL语句如下:CREATETABLETPPROD.CONFIG( NOVARCHAR2(50), CONFIGCODEVARCHAR2(400), CONFIGVALUEVARCHAR2(400), CONSTRAINTPK_GUENDORASSISTCONFIGPRIMARYKEY(NO,CONFIGCODE));CREATEUNIQUEINDEXPK_GUENDORASSISTCONFIGONTPPROD.GUENDORASSI......
  • Oracle 替代变量
    替代变量说明在Oracle命令行中默认&为替代变量,只要在执行的sql中出现&符号,那么&符号后面的sql则会失效;这就意味着,包含&符号的sql将不会正确的执行比如:insertintoXXX_DB.XXX_TABLE(COLUMN1,COLUMN2)value('AB&CD','EF&GH');在不关闭替代变量的情况下,数据库中的数据将不会......
  • Oracle 替代变量
    替代变量说明在Oracle命令行中默认&为替代变量,只要在执行的sql中出现&符号,那么&符号后面的sql则会失效;这就意味着,包含&符号的sql将不会正确的执行比如:insertintoXXX_DB.XXX_TABLE(COLUMN1,COLUMN2)value('AB&CD','EF&GH');在不关闭替代变量的情况下,数据库中的数据将不会......
  • windows 环境下使用脚本备份 oracle 数据库数据
    @echooffecho================================================echoWindows环境下Oracle数据库的自动备份脚本echo1.使用当前日期命名备份文件。echo2.自动删除7天前的备份。echo================================================echo以“YYYYMMDD”格......
  • Oracle分析函数- count()/sum() over(partition by 分组 order by 排序) 详解
    优点:代码简单明了,并且执行效率高,(不影响总的记录数)如果不用这种函数去写,按照平时我们的思路首先想到的可能是子查询,那么将至少会走4次以上的全表扫描:(1)每个订单中产品数量大于3的产品至少1个(003,004)(2)每个订单中折扣标志为'1'的产品至少有2个(002,004)(3)每个订单......
  • Oracle数据表搬迁到openGauss
    Oracle数据表搬迁到openGauss搬迁方法Oracle数据表搬迁到openGauss数据库比较容易想到的两个工具是oracle_fdw及Ora2Pg。oracle_fdworacle_fdw是嵌入在目标端数据库里的一个扩展插件,允许在目标端数据库里访问其他异构数据库的表,openGauss数据库目前也支持这一插件。......