zoukankan      html  css  js  c++  java
  • Oracle 行拼接 wmsys.wm_concat扩展

    将多行数据拼接成一行:

    --wmsys.wm_concat
    select wmsys.wm_concat(a.hdid) as test from flow_currentrecord a where a.flowid=222 group by a.flowid;

    但有大小限制:字符串缓冲区太小,超过varchar 4000长度。
    扩展:更改返回类型为clob

    --Type 
    CREATE OR REPLACE TYPE zh_concat_im AUTHID CURRENT_USER AS OBJECT 
    ( 
      CURR_STR clob, 
      STATIC FUNCTION ODCIAGGREGATEINITIALIZE(SCTX IN OUT zh_concat_im) 
        RETURN NUMBER, 
      MEMBER FUNCTION ODCIAGGREGATEITERATE(SELF IN OUT zh_concat_im, 
                                           P1   IN VARCHAR2) RETURN NUMBER, 
      MEMBER FUNCTION ODCIAGGREGATETERMINATE(SELF        IN zh_concat_im, 
                                             RETURNVALUE OUT clob, 
                                             FLAGS       IN NUMBER) 
        RETURN NUMBER, 
      MEMBER FUNCTION ODCIAGGREGATEMERGE(SELF  IN OUT zh_concat_im, 
                                         SCTX2 IN zh_concat_im) RETURN NUMBER 
    ); 
    / 
    --TYPE BODY 
    CREATE OR REPLACE TYPE BODY zh_concat_im IS
      STATIC FUNCTION ODCIAGGREGATEINITIALIZE(SCTX IN OUT zh_concat_im) 
        RETURN NUMBER IS
      BEGIN
        SCTX := zh_concat_im(NULL); 
        RETURN ODCICONST.SUCCESS; 
      END; 
      MEMBER FUNCTION ODCIAGGREGATEITERATE(SELF IN OUT zh_concat_im, 
                                           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 zh_concat_im, 
                                             RETURNVALUE OUT clob, 
                                             FLAGS       IN NUMBER) RETURN NUMBER IS
      BEGIN
        RETURNVALUE := CURR_STR; 
        RETURN ODCICONST.SUCCESS; 
      END; 
      MEMBER FUNCTION ODCIAGGREGATEMERGE(SELF  IN OUT zh_concat_im, 
                                         SCTX2 IN zh_concat_im) 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;  
    / 
    --FUNCTION  
    create or replace FUNCTION zh_concat(P1 VARCHAR2) RETURN clob AGGREGATE USING zh_concat_im;

    调用:

    select zh_concat(a.hdid) as test from flow_currentrecord a where a.flowid=222 group by a.flowid;
    1.职业成功的85%取决于职业心态,15%取决于职业技能 2.不只是上级要你去做或等待别人要你去做 3.营造积极友善的工作氛围,哪怕吹点善意的牛
  • 相关阅读:
    使用ExcelMapper制作用于打印的矩阵
    八皇后问题-回溯法解
    HashMap-1.8 你看得懂的原理分析
    一生之敌
    必学十大经典排序算法,看这篇就够了(附完整代码/动图/优质文章)
    事务的四种隔离级别
    数据库的三范式
    ConcurrentHashMap底层实现原理和源码分析
    leetcode-160-相交链表(simple)
    JAVA中priorityqueue详解
  • 原文地址:https://www.cnblogs.com/i-blog/p/3478219.html
Copyright © 2011-2022 走看看