`
sea0108
  • 浏览: 54535 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

自定义oracle字符串聚合函数

阅读更多
自定义oracle字符串聚合函数 STRCAT 三步骤。

(1)定义  STRCAT_TYPE:
create or replace type strcat_type as object (
    cat_string varchar2(5000), 
    max_len    number ,
    too_long   number , 
    static function ODCIAggregateInitialize(cs_ctx In Out strcat_type) return number, 
    member function ODCIAggregateIterate(self In Out strcat_type,value in varchar2) return number, 
    member function ODCIAggregateMerge(self In Out strcat_type,ctx2 In Out strcat_type) return number, 
    member function ODCIAggregateTerminate(self In Out strcat_type,returnValue Out varchar2,flags in number) return number 
) 


(2) STRCAT_TYPE Body:
create or replace type body strcat_type is
  static function ODCIAggregateInitialize(cs_ctx IN OUT strcat_type) return number 
  is 
  begin 
      cs_ctx := strcat_type( cat_string => null, max_len => 4000, too_long => 0 ); 
      return ODCIConst.Success; 
  end; 

  member function ODCIAggregateIterate(self IN OUT strcat_type, 
                                       value IN varchar2 ) 
  return number 
  is 
  begin 
      if ( self.cat_string is null ) or 
         ( self.too_long < 1 and
           instr(self.cat_string||',' , ','||value||',') < 1 )  then         
         if length(self.cat_string) + length(value) > self.max_len then
            self.too_long := 1;
            return ODCIConst.Success; 
         end if;                     
         self.cat_string := self.cat_string || ','|| value;
      end if;    
      
      return ODCIConst.Success; 
  end; 

  member function ODCIAggregateTerminate(self IN Out strcat_type, 
                                         returnValue OUT varchar2, 
                                         flags IN number) 
  return number 
  is 
  begin 
      returnValue := substr(self.cat_string,2); 
      if self.too_long > 0 then 
         returnValue := substr(returnValue,1,self.max_len-3)||'...';
      end if;
      
      return ODCIConst.Success; 
  end; 

  member function ODCIAggregateMerge(self IN OUT strcat_type, 
                                     ctx2 IN Out strcat_type) 
  return number 
  is 
  begin 
      self.cat_string := self.cat_string || ',' || ctx2.cat_string; 
      return ODCIConst.Success; 
  end; 
end; 


(3)定义 STRCAT 函数:
CREATE OR REPLACE FUNCTION strcat(input varchar2 )
RETURN varchar2 
AGGREGATE USING strcat_type; 
分享到:
评论

相关推荐

    Oracle10g自定义聚合函数(字符串拼接)

    * 自定义聚合函数 wmsys.wm_concat 替换办法 * 超大字符串拼接,单个字符串4000、分隔符100... * Oracle11g Release2版本引入了LISTAGG 函数,使得聚集连接字符串变得很容易。并且允许使用我们指定连接串中的字段顺序

    Oracle字段转字符串/多行记录合并/连接/聚合字符串的几种方法

    `LISTAGG()`是Oracle 11g引入的一个聚合函数,用于将多行数据合并为一个字符串,特别适合于分组查询。它允许指定分隔符: ```sql SELECT column1, LISTAGG(column2, ', ') WITHIN GROUP (ORDER BY column2) FROM...

    Oracle 多行记录合并_连接_聚合字符串的几种方法_oracle_脚本之家1

    Oracle数据库在处理多行记录合并、连接和聚合字符串时,有多种方法,下面将详细介绍其中的几种常见技术。 1. 被集合字段范围小且固定型 ...理解并掌握这些方法,有助于我们在实际工作中更有效地处理字符串聚合问题。

    聚集函数(自定义分隔符拼接字符串)

    在Oracle数据库中,有时我们需要将多个字符串连接成一个单一的字符串,这在处理报告或聚合数据时非常常见。Oracle提供了一些内置的聚集函数,如`LISTAGG`,但它们可能无法满足所有需求,比如在特定场景下需要自定义...

    类似于wmsys.wm_concat的自定义函数clob版

    这些脚本很可能是用于创建自定义的CLOB聚合函数,类似`WM_CONCAT`但能处理更大的字符串。`STRAGG`函数在某些数据库系统中是一个内置的聚合函数,但在Oracle中并不是,所以很可能这两个脚本是用户自定义实现的版本。 ...

    解决Oracle没有WM_CONCAT函数.zip

    在Oracle数据库中,WM_CONCAT是一个非常实用的聚合函数,用于将一组字符串连接成一个单一的字符串,类似于SQL Server中的STRING_AGG或MySQL中的GROUP_CONCAT。然而,Oracle官方并没有提供这个函数,它是一个第三方...

    oracle最常用的函数或方法总结

    5. **聚合函数** - `COUNT()`:计算行数。 - `SUM()`:计算数值列的总和。 - `AVG()`:计算平均值。 - `MAX()` 和 `MIN()`:找到最大值和最小值。 6. **分组和排序函数** - `GROUP BY`:根据一个或多个列对...

    重写oracle wm_contact函数

    这个类型用于定义一个聚合函数,其主要功能是将多个字符串连接成一个单一的字符串,并支持多种操作,如初始化、迭代和终止等。具体来说: 1. **初始化**: `ODCIAGGREGATEINITIALIZE`方法用于初始化`zh_concat_im`...

    oracle·10G函数大全

    2. **转换函数**:如TO_NUMBER()将字符串转换为数字,TO_CHAR()则相反,将数字转换为格式化的字符串。 二、日期时间函数 1. **日期运算**:SYSDATE获取当前系统日期,ADD_MONTHS()添加或SUBTRACT_MONTHS()减去指定...

    oracle sql内置函数大全

    在Oracle数据库系统中,内置函数分为多种类型,包括数值函数、字符串函数、日期时间函数、转换函数、数学函数、聚合函数等。下面将详细介绍这些函数类别及其常见用法。 1. **数值函数**: - `ABS()`:返回一个数的...

    oracle函数课件

    这些文件可能包含了Oracle函数的基础知识,如聚合函数(如SUM, AVG, COUNT等)、数学函数(如ABS, ROUND, TRUNC等)、字符串操作函数(如SUBSTR, CONCAT, INSTR等)以及日期时间函数(如SYSDATE, ADD_MONTHS, TO_...

    Oracle多行记录合并

    - **`LISTAGG()` 函数:** 这是Oracle 11g及以后版本引入的一个强大的聚合函数,专门用于将多行数据合并为单行字符串。它接受一个排序表达式和一个分隔符,返回所有行的合并结果。例如,假设我们有一个名为`orders`...

    Oracle 多行记录合并/连接/聚合字符串的几种方法

    例如,可以使用`LISTAGG`函数(Oracle 11g及以后版本),这是一个聚合函数,用于将一组值连接成一个字符串。如果没有`LISTAGG`,可以使用`XMLAGG`或者自定义的用户定义函数来达到类似的效果。 ```sql -- 如果使用...

    oracle-database-programming.rar_oracle_oracle函数

    在Oracle数据库中,函数可以分为几大类,包括内置函数、数学函数、字符串函数、日期时间函数、转换函数、系统信息函数、聚合函数以及自定义函数等。以下将对这些函数进行详细讲解: 1. **内置函数**:这是Oracle...

    oracle 创建wm_concat函数

    ### Oracle 创建wm_concat函数 #### 知识点一:Oracle 10G及以下版本的wm_concat函数自定义...这种方法不仅可以帮助我们在早期版本的Oracle数据库中实现字符串连接功能,还可以加深我们对Oracle数据库内部机制的理解。

    Oracle10G函数大全(chm格式的,比较全面)

    4. **聚合函数**: - `COUNT()`: 计算一组值的数量。 - `SUM()`: 计算一组值的总和。 - `AVG()`: 计算一组值的平均值。 - `MAX()`: 找出一组值的最大值。 - `MIN()`: 找出一组值的最小值。 5. **转换函数**: ...

    oracle函数大全(word+chm双版本)

    文档可能涵盖了各种函数类别,如数学函数、字符串函数、日期时间函数、转换函数、逻辑函数、聚合函数等。例如,数学函数如`ABS()`用于返回一个数的绝对值,`MOD()`用于计算两数相除的余数;字符串函数如`SUBSTR()`...

    Oracle函数大全

    - `TO_CHAR()`: 将日期转换为字符串,可以自定义格式。 4. **逻辑函数**: - `IFNULL()`: 如果表达式为NULL,则返回替代值。 - `NVL()`: 类似于IFNULL,用于处理NULL值。 - `CASE WHEN THEN`: 条件判断语句,...

    oracle.10G函数大全.chm

    1. **字符串函数**: - `CONCAT`:连接两个或更多字符串。 - `SUBSTR`:从字符串中提取子串。 - `INSTR`:查找字符串中特定字符或子串的位置。 - `REPLACE`:替换字符串中的某个子串。 - `UPPER` 和 `LOWER`:...

    oracle 10G函数大全(中文)

    4. **聚合函数与分析函数**: - 分组函数如COUNT、SUM、AVG、MAX、MIN在GROUP BY子句中使用,对分组数据进行计算。 - 分析函数如ROW_NUMBER、RANK、DENSE_RANK、LAG、LEAD等,用于窗口查询,提供行间计算功能。 5...

Global site tag (gtag.js) - Google Analytics