iis服务器助手广告广告
返回顶部
首页 > 资讯 > 数据库 >oracle 12C wmsys.wm_concat()函数
  • 790
分享到

oracle 12C wmsys.wm_concat()函数

2024-04-02 19:04:59 790人浏览 薄情痞子
摘要

    对于一些业务,需要连接函数把内容拼接文本文件的时候,借助合适的函数,非常重要,减少很多工作。 目前常用的连接函数有 wmsys.wm_concat(

    对于一些业务,需要连接函数把内容拼接文本文件的时候,借助合适的函数,非常重要,减少很多工作。
目前常用的连接函数有 wmsys.wm_concat()和 LISTAGG( )函数,当然还有看拼接内容的长度来选。
oracle数据库中,还有一个根据版本选择。最新的两个版本中,11G中,自带有两个函数,但在12C中,
oracle不再自带 wmsys.wm_concat(),如果实际业务中需要到,需要自己创建上。当然,如何创建,会在本文的最后,
会提供两个版本的 wmsys.wm_concat()和 wmsys.wm_concat()函数沿用过来。 很多人说在12C中, )函数
就已经够用了,但是在服务过的客户的应用中,该函数是远远不够使用的,连版本1的 wmsys.wm_concat()函数都不够用,
不能满足业务应用的大量拼接业务的使用。

----创建测试表:
--测试表结构:
sql> set lines 80
SQL> desc suxing.WMCONCAT_TAB
 Name                                      Null?    Type
 ----------------------------------------- -------- ----------------------------
 NAME                                               VARCHAR2(20)
 TEL                                                VARCHAR2(20)
 INSERT_DATE                                        DATE

--测试表记录数:
SQL> select distinct count(*) from suxing.WMCONCAT_TAB;
  COUNT(*)
----------
    262144

--测试表内容:
SQL> select distinct * from suxing.WMCONCAT_TAB;
NAME                 TEL                  INSERT_DA
-------------------- -------------------- ---------
suxing1              18777104737          27-NOV-17
suxing7              18777104733          27-NOV-17
suxing2              18777104738          27-NOV-17
suxing3              18777104739          27-NOV-17
suxing5              18777104731          27-NOV-17
suxing0              18777104736          27-NOV-17
suxing4              18777104730          27-NOV-17
suxing6              18777104732          27-NOV-17
8 rows selected.

##该表共26w多条记录,其中是以上8条记录的重复记录。三个字段,分别为名字、11位号码和输入日期。

----使用不同函数或者不同版本查询拼接表 LISTAGG( )函数:
SELECT name, LISTAGG(TEL, ',') WITHIN GROUP (ORDER BY TEL) AS pho_lists
FROM   suxing.WMCONCAT_TAB
GROUP BY name;
oracle 12C wmsys.wm_concat()函数
##直接报错,拼接内容过长,超出该函数的保存长度varchar2(4000 ) 。
oracle 12C wmsys.wm_concat()函数

--使用版本1的 wmsys.wm_concat()函数:
SELECT name,  wm_concat(TEL) AS pho_lists
FROM   suxing.WMCONCAT_TAB
GROUP BY name;
oracle 12C wmsys.wm_concat()函数
##同样报内部的拼接内容的长度超出了内部类的保存长度pl/sql varchar2 (32767 ) 。

wmsys.wm_concat()函数 :
-- wmsys.wm_concat()函数 :
改版本的函数,拼接的内容是以varchar2(32767 )数据类型的文本形式保存。
一.解wmsys用户
alter user wmsys identified by "XXXXXX" account unlock;
-- 创建包、包体和函数
以wmsys用户登录数据库,执行下面的命令 CREATE OR REPLACE TYPE WM_CONCAT_IMPL AS OBJECT  
-- AUTHID CURRENT_USER AS OBJECT  
(  
CURR_STR VARCHAR2(32767),   
STATIC FUNCTioN ODCIAGGREGATEINITIALIZE(SCTX IN OUT WM_CONCAT_IMPL) RETURN NUMBER,  
MEMBER FUNCTION ODCIAGGREGATEITERATE(SELF IN OUT WM_CONCAT_IMPL,  
P1 IN VARCHAR2) RETURN NUMBER,  
MEMBER FUNCTION ODCIAGGREGATETERMINATE(SELF IN WM_CONCAT_IMPL,  
RETURNVALUE OUT VARCHAR2,  
FLAGS IN NUMBER)  
RETURN NUMBER,  
MEMBER FUNCTION ODCIAGGREGATEMERGE(SELF IN OUT WM_CONCAT_IMPL,  
SCTX2 IN WM_CONCAT_IMPL) RETURN NUMBER  
);  
/  
  
--定义类型body:  
CREATE OR REPLACE TYPE BODY WM_CONCAT_IMPL  
IS  
STATIC FUNCTION ODCIAGGREGATEINITIALIZE(SCTX IN OUT WM_CONCAT_IMPL)  
RETURN NUMBER  
IS  
BEGIN  
SCTX := WM_CONCAT_IMPL(NULL) ;  
RETURN ODCICONST.SUCCESS;  
END;  
MEMBER FUNCTION ODCIAGGREGATEITERATE(SELF IN OUT WM_CONCAT_IMPL,  
P1 IN VARCHAR2)  
RETURN NUMBER  
IS  
BEGIN  
IF(CURR_STR IS NOT NULL) THEN  
CURR_STR := CURR_STR || ',' || P1;  
ELSE  
CURR_STR := P1;  
END IF;  
RETURN ODCICONST.SUCCESS;  
END;  
MEMBER FUNCTION ODCIAGGREGATETERMINATE(SELF IN WM_CONCAT_IMPL,  
RETURNVALUE OUT VARCHAR2,  
FLAGS IN NUMBER)  
RETURN NUMBER  
IS  
BEGIN  
RETURNVALUE := CURR_STR ;  
RETURN ODCICONST.SUCCESS;  
END;  
MEMBER FUNCTION ODCIAGGREGATEMERGE(SELF IN OUT WM_CONCAT_IMPL,  
SCTX2 IN WM_CONCAT_IMPL)  
RETURN NUMBER  
IS  
BEGIN  
IF(SCTX2.CURR_STR IS NOT NULL) THEN  
SELF.CURR_STR := SELF.CURR_STR || ',' || SCTX2.CURR_STR ;  
END IF;  
RETURN ODCICONST.SUCCESS;  
END;  
END;  
/  
--自定义行变列函数:  
CREATE OR REPLACE FUNCTION wm_concat(P1 VARCHAR2)  
RETURN VARCHAR2 AGGREGATE USING WM_CONCAT_IMPL ;  
/  

--创建同义词并授权:
[sql] view plain copy
create public synonym WM_CONCAT_IMPL for wmsys.WM_CONCAT_IMPL  
/  
create public synonym wm_concat for wmsys.wm_concat  
/  
  
grant execute on WM_CONCAT_IMPL to public  
/  
grant execute on wm_concat to public  
/  


版本2的 :
该版本的函数,拼接的内容是以clob (4G <span style="white-space:nORMal;font-family:;" "="">)数据类型的文本形式保存。
alter user wmsys identified by "Test_2017" account unlock;
--创建包、包体和函数:
以wmsys用户登录数据库,执行下面的命令
CREATE OR REPLACE TYPE wm_concat_impl AUTHID CURRENT_USER AS OBJECT
(
  CURR_STR    VARCHAR2(32767),
  CURR_STR_C  CLOB,
  STATIC FUNCTION ODCIAGGREGATEINITIALIZE(SCTX IN OUT WM_CONCAT_IMPL) RETURN NUMBER,
  MEMBER FUNCTION ODCIAGGREGATEITERATE(SELF IN OUT WM_CONCAT_IMPL, P1 VARCHAR2) RETURN NUMBER,
  MEMBER FUNCTION ODCIAGGREGATETERMINATE(SELF WM_CONCAT_IMPL, RETURNVALUE OUT CLOB, FLAGS NUMBER) RETURN NUMBER,
  MEMBER FUNCTION ODCIAGGREGATEMERGE(SELF IN OUT WM_CONCAT_IMPL, SCTX2 WM_CONCAT_IMPL) RETURN NUMBER
);
/ --定义类型body:  
CREATE OR REPLACE TYPE BODY wm_concat_impl IS
  STATIC FUNCTION ODCIAGGREGATEINITIALIZE(SCTX IN OUT WM_CONCAT_IMPL) RETURN NUMBER IS
  BEGIN
    SCTX := WM_CONCAT_IMPL(NULL,NULL) ;
    RETURN ODCICONST.SUCCESS;
  END;
  MEMBER FUNCTION ODCIAGGREGATEITERATE(SELF IN OUT WM_CONCAT_IMPL, P1 VARCHAR2) RETURN NUMBER IS
  BEGIN
    IF (CURR_STR_C IS NULL AND (CURR_STR IS NULL OR LENGTH(CURR_STR)<29950)) THEN
      IF(CURR_STR IS NOT NULL) THEN 
        CURR_STR := CURR_STR || ',' || P1;
      ELSE
        CURR_STR := P1;
      END IF;
    ELSE
      IF (CURR_STR_C IS NULL) THEN
        CURR_STR_C := CURR_STR ;
        CURR_STR := NULL ;
      END IF ;
      CURR_STR_C := CURR_STR_C || ',' || P1;
    END IF ;
    RETURN ODCICONST.SUCCESS;
  END;
  MEMBER FUNCTION ODCIAGGREGATETERMINATE(SELF WM_CONCAT_IMPL, RETURNVALUE OUT CLOB, FLAGS NUMBER) RETURN NUMBER IS
  BEGIN
    IF (CURR_STR IS NOT NULL) THEN
      RETURNVALUE := CURR_STR ;
    ELSE
      RETURNVALUE := CURR_STR_C ;
    END IF ;
    RETURN ODCICONST.SUCCESS;
  END;
  MEMBER FUNCTION ODCIAGGREGATEMERGE(SELF IN OUT WM_CONCAT_IMPL, SCTX2 WM_CONCAT_IMPL) RETURN NUMBER IS
  BEGIN
    IF(SCTX2.CURR_STR IS NOT NULL) THEN 
      SELF.CURR_STR := SELF.CURR_STR || ',' || SCTX2.CURR_STR ;
    END IF;
    RETURN ODCICONST.SUCCESS;
  END;
END;
/

--自定义行变列函数:  
CREATE OR REPLACE FUNCTION wm_concat(P1 VARCHAR2)  
RETURN CLOB AGGREGATE USING WM_CONCAT_IMPL ;  
/  

--创建同义词并授权:
[sql] view plain copy
create public synonym WM_CONCAT_IMPL for wmsys.WM_CONCAT_IMPL  
/  
create public synonym wm_concat for wmsys.wm_concat  
/  
  
grant execute on WM_CONCAT_IMPL to public  
/  
grant execute on wm_concat to public  
/  

您可能感兴趣的文档:

--结束END--

本文标题: oracle 12C wmsys.wm_concat()函数

本文链接: https://www.lsjlt.com/news/45337.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • sql concat()函数
    1.concat() concat()函数用于将两个字符串连接起来,形成一个单一的字符串 eg: employee_tbl idnamework_datedaily1John2007-01-242502Ram2007-0...
    99+
    2023-09-02
    sql mysql
  • sql拼接函数Group_concat()
    Group_concat 聚合函数 MySQL中,Group_concat() 函数 将一个分组中的指定元素(列或表达式)的值,拼接成一个字符串返回(用逗号分隔)。 Group_concat...
    99+
    2023-10-11
    sql mysql 数据库
  • mysql的concat()函数如何用
    这篇文章主要介绍了mysql的concat()函数如何用的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇mysql的concat()函数如何用文章都会有所收获...
    99+
    2024-04-02
  • Python3二分查找库函数bisect(),bisect_left()和bisect_right()的区别
    目录case 1case 2case 3前提:列表有序!!! bisect()和bisect_right()等同,那下面就介绍bisect_left()和bise...
    99+
    2023-03-11
    Python3二分查找库函数bisect() bisect_left()和bisec_right()区别
  • Oracle 12c数据库安装
    一、准备工作...
    99+
    2024-04-02
  • pandas中连接函数concat()函数的使用方法
    这篇文章给大家分享的是有关pandas中连接函数concat()函数的使用方法的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。python中pandas库可以对相关的文件或文本数据进行的读取操作,对于想要...
    99+
    2023-06-14
  • Oracle 12c创建用户container参数
    在cdb下创建用户默认是container=all,不能设置container=current在pdb下创建用户默认是container=current,不能设置container=all1.在pdb下用c...
    99+
    2024-04-02
  • Oracle 12C RAC CDB数据库部署
    Oracle中的12C新特性-容器数据库---12.1.0.2_GI_RAC_Create_CDB_Blog一、         安装前的准备安装两个节点的 1...
    99+
    2023-05-31
  • Python3二分查找库函数bisect(),bisect_left()和bisect_right()的区别是什么
    这篇文章主要介绍“Python3二分查找库函数bisect(),bisect_left()和bisect_right()的区别是什么”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“...
    99+
    2023-07-05
  • Oracle 数据库12c新特性总结
    本篇内容介绍了“Oracle 数据库12c新特性总结”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!  1....
    99+
    2024-04-02
  • Oracle 12c Non CDB 数据库切换成PDB
    数据库从10.2(11g)升级到12c或者在12c中创建的,数据库就是NON CDB,和12c 之前的版本就没有什么区别,所以一般会把12cnoncdb转为pdb进行管理。 测试步骤如下: 一:源库 1. ...
    99+
    2024-04-02
  • Oracle 数据库12c新特性有哪些
    这篇文章将为大家详细讲解有关Oracle 数据库12c新特性有哪些,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。  1. 在线重命名和重新定位活跃数据文件   不同于以...
    99+
    2024-04-02
  • 怎么应用Oracle 12c插拔数据库
    本篇内容介绍了“怎么应用Oracle 12c插拔数据库”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!一、概...
    99+
    2024-04-02
  • mysql常用函数之group_concat()、groupby、count()、casewhenthen的使用
    目录场景:一、行转列函数 group_concat(arg)二、分组 group by、count()、sum() 函数的组合使用三、count() 配...
    99+
    2023-01-04
    mysql group_concat() group by count() case when then
  • 如何部署Oracle 12c企业版数据库
    这篇文章主要介绍了如何部署Oracle 12c企业版数据库,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。在计算机信息安全领域中,数据库系统无...
    99+
    2024-04-02
  • Oracle数据库12c的新特性有哪些
    这篇“Oracle数据库12c的新特性有哪些”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“...
    99+
    2024-04-02
  • oracle 12c如何检查pdb数据库状态
    这篇文章主要为大家展示了“oracle 12c如何检查pdb数据库状态”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“oracle 12c如何检查pdb数据库状态...
    99+
    2024-04-02
  • Oracle 12c数据库扩展的方法是什么
    本篇内容介绍了“Oracle 12c数据库扩展的方法是什么”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!在...
    99+
    2024-04-02
  • oracle 12c新特性之在线移动数据文件
    11g时是无法在线移动数据文件的,12c增强了移动数据文件的功能,不仅可以更改路径,还可以给数据文件改名。 oracle 12c在线移动或更名数据文件语法案例: alter database mo...
    99+
    2024-04-02
  • Oracle 12C如何实现跨网络传输数据库
    这篇文章主要为大家展示了“Oracle 12C如何实现跨网络传输数据库”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“Oracle 12C如何实现跨网络传输数据库...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作