首页 > 数据库 >关于oracle开发中碰到的同列多行合并字符串的问题

关于oracle开发中碰到的同列多行合并字符串的问题

时间:2022-12-16 19:24:04浏览次数:56  
标签:多行 函数 WM Oracle 同列 字符串 oracle wm CONCAT

如何将Oracle中同一列的多行记录拼接成一个字符串?

本人在oracle的存储过程的开发中,碰到了同一列的多行记录需要拼接成一个字符串进行存储,特此再次记录!

1.可以使用wm_concat()函数。下面给出例子(本数据库不支持wm_cocat()函数进行使用,所以找了一个例子语句供他人参考!)。

select  deptno,wm_concat(ename)  from  emp  group  by  deptno;

本人使用此函数报错ORA-00904: "wm_concat":invalid identifier。原因如下:

若在创建数据库的时候没有创建WMSYS用户,则在SQL或PL/SQL中有用到WM_CONCAT函数的时候就会报ORA-00904的错误。其实,WMSYS用户下的WM_CONCAT函数有很重要的用途,比如行转列,但是该函数不稳定。例如,在Oracle 10g上返回的是字符串类型,但是在Oracle 11gR2上返回的是CLOB类型。很多数据库开发人员在程序中都使用了该函数,若是系统升级,则会导致程序出现错误。为了减轻程序员修改程序的工作量,只有重建函数WM_CONCAT来解决该问题。
若没有创建WMSYS用户的话,则在查询DBA_OBJECTS视图的时候就不能查询到WM_CONCAT的相关信息。在正常情况下查询DBA_OBJECTS视图,会有如下的信息:

SQL> SELECT * FROM DBA_OBJECTS WHERE OBJECT_NAME LIKE 'WM_CONCAT%';

具体措施措施可以看下面这位大佬的贴子->

 https://mp.weixin.qq.com/s?src=11&timestamp=1671186011&ver=4230&signature=ELntaMPJXpT-5VZrVeCX26-tHPUn2kjBpcMPFV4370*hj3gmjS*ChlIKX35QIp7dVCl95jNG*mgxsIoJgVYVNqZSlN4dtdFGpBZdIX-Af3D1K6T4zRHzDF10c2QjGfPc&new=1

2.因为上面那种方法我使用的数据库会报错,与WM_CONCAT相似的还有一个函数是LISTAGG。这是一个Oracle的列转行函数,使用示例如下所示,所以采用第二种方法,也就是LISTAGG函数:

sql语句:select listagg(字段名,',') within group (order by 字段名) as 别名 from table where 拼接条件

本次随笔到此结束!谢谢各位观看。

标签:多行,函数,WM,Oracle,同列,字符串,oracle,wm,CONCAT
From: https://www.cnblogs.com/feng-zhi/p/16988135.html

相关文章

  • Oracle的网络三大配置文件sqlnet.ora、tnsnames.ora、listener.ora
    1.说明为了使得外部进程能够访问Oracle 数据库则必须配置Oracle 网络服务器环境配置, Oracle 网络服务器环境是通过配置listener.ora、sqlnet.ora 和 tnsnames.ora ......
  • oracle设置UNIQUE唯一约束
    目录oracle设置UNIQUE唯一约束1、命名规范2、语法3、增加约束4、删除约束oracle设置UNIQUE唯一约束对一个变的多个列的数据看成唯一。1、命名规范unq_+约束名,长度最长5......
  • 查看oracle中执行计划
    Oracle六种方法查看执行计划 目录:(一)六种执行计划 (1)explainplanfor (2)setautotraceon (3)statistics_level=all (4)dbms_xplan.display_cursor获取 (5)事......
  • 使用EFcore连接Oracle数据时出现的错误及解决方案(Oracle版本指定错误)
    使用EFcore连接Oracle数据时出现的错误及解决方案(Oracle版本指定错误)程序环境1,DotNet版本.net6.02,EFcore版本:Microsoft.EntityFrameWorkCore6.0.11Microsof......
  • Microsoft.Practices.EnterpriseLibrary连接Oracle
    icrosoftEnterpriseLibrary用起来也是挺不错的,对于习惯自己写sql语句的开发者们,这个应该挺好的。下面以连接Oracle为例简单介绍下如何连接数据库。首先下载MicrosoftEnt......
  • 一:OEL6.9x64 安装Oracle11gR2
    标签(空格分隔):Oracle系列一:系统环境介绍系统:oraclelinux6.9x64主机名:cat/etc/hosts----172.16.10.41flyfish41172.16.10.42flyfis......
  • 15.Oracle事物
    简介oracle事物主要用于保持oracle数据库的数据一致性,oracle事物可以看成一个SQL块的整体,只要某一个SQL语句错误,那么事物中的SQL被看做一个整体,一起回滚,要么就是一起成功全......
  • 10.Oracle存储过程
    1.Oracle存储过程语法结构create[orreplace]procedure过程名(p1in|outdatatype,p2in|outdatatype,...pnin|outdatatype)is....--声明部......
  • 9.Oracle创建函数
    1.Oracle创建函数Oracle创建函数是通过PL/SQL自定义编写的,通过关键字function按照自己的需求把复杂的业务逻辑封装进PL/SQL函数中,函数提供一个返回值,返回给使用者。组成部......
  • 11.Oracle游标
    Oracle游标简介:Oracle游标是通过关键字CURSOR的来定义一组Oracle查询出来的数据集,类似数组一样,把查询的数据集存储在内存当中,然后通过游标指向其中一条记录,通过循环游标达......