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.营造积极友善的工作氛围,哪怕吹点善意的牛
  • 相关阅读:
    实现servlet的三种方式
    java中的运算符与表达式
    封装链接数据库的工具
    java 概述
    HTTP请求方式中get和post的区别
    asp.net获取当前网址url
    利用IP安全策略关闭危险端口
    IE6 css fixed
    存储过程中使用事务详解
    windows 2003内存性能分析工具
  • 原文地址:https://www.cnblogs.com/i-blog/p/3478219.html
Copyright © 2011-2022 走看看