Oracle 自定义聚合函数

create or replace type str_concat_type as object (
    cat_string varchar2(4000),
    static function ODCIAggregateInitialize(cs_ctx In Out str_concat_type) return number,
    member function ODCIAggregateIterate(self In Out str_concat_type,value in varchar2) return number,
    member function ODCIAggregateMerge(self In Out str_concat_type,ctx2 In Out str_concat_type) return number,
    member function ODCIAggregateTerminate(self In Out str_concat_type,returnValue Out varchar2,flags in number) return number
)
/

create or replace type body str_concat_type is
  static function ODCIAggregateInitialize(cs_ctx IN OUT str_concat_type) return number
  is
  begin
      cs_ctx := str_concat_type( null );
      return ODCIConst.Success;
  end;

  member function ODCIAggregateIterate(self IN OUT str_concat_type,
                                       value IN varchar2 )
  return number
  is
  begin
      --1. concat string
      self.cat_string := self.cat_string || ‘,‘|| value;
      -- 2.get union set
      -- if  instr(self.cat_string, value ) = 0 or self.cat_string is null then
      --        self.cat_string := self.cat_string || ‘,‘ || value ;
      -- else
      --        self.cat_string := self.cat_string ||‘‘ ;
      -- end if ;
      return ODCIConst.Success;
  end;

  member function ODCIAggregateTerminate(self IN Out str_concat_type,
                                         returnValue OUT varchar2,
                                         flags IN number)
  return number
  is
  begin
      returnValue := ltrim(rtrim(self.cat_string,‘,‘),‘,‘);
      return ODCIConst.Success;
  end;

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

end;
/

CREATE OR REPLACE FUNCTION str_concat(input varchar2) RETURN varchar2
  PARALLEL_ENABLE
  AGGREGATE USING str_concat_type;
/

  

实现的功能和wm_concat一样。

原文地址:https://www.cnblogs.com/ayumie/p/10002486.html

时间: 2024-10-08 01:04:42

Oracle 自定义聚合函数的相关文章

SQL Server 自定义聚合函数

说明:本文依据网络转载整理而成,因为时间关系,其中原理暂时并未深入研究,只是整理备份留个记录而已. 目标:在SQL Server中自定义聚合函数,在Group BY语句中 ,不是单纯的SUM和MAX等运算,可以加入拼接字符串. 环境: 1:Sqlserver 2008 R2 2:Visual Studio 2013 第一部分: .net代码: using System; using System.Data; using Microsoft.SqlServer.Server; using Syst

oracle sum()聚合函数

原文链接:https://blog.csdn.net/cizatu5130/article/details/100291347 oracle sum()聚合函数 2016-05-13 20:08:00 cizatu5130 阅读数 8 Oracle 的sum聚合函数的功能就是求和(这里暂时不讨论分析函数用法),一般用法不多讲,有个用法比较令人疑惑,曾经也踩过它的坑.示例如下:  declare    cursor t_cur is      select * from emp where emp

pandas rolling对象的自定义聚合函数

pandas rolling对象的自定义聚合函数 计算标准差型的波动率剪刀差 利用自定义的聚合函数, 把它应用到pandas的滚动窗长对象上, 可以求出 标准差型的波动率剪刀差 代码 def volat_diff(roc1_rolling, center=-0.001, nSD=5): '''计算: 标准差型波动率剪刀差 参数: roc1_rolling: 滚动窗长里的roc1 center: roc1(1日波动率)的平均值 nSD: 求标准差时用的窗长 用法: 1. rolling.apply

Oracle自定义聚集函数

今天工作中看见别人写的自定义聚集函数,所以一门心思的想搞懂,就在网上找资料了. 自定义聚集函数 自定义聚集函数接口简介 Oracle提供了很多预定义好的聚集函数,比如Max(), Sum(), AVG(), 但是这些预定义的聚集函数基本上都是适应于标量数据(scalar data), 对于复杂的数据类型,比如说用户自定义的Object type, Clob等, 是不支持的. 但是,幸运的是, 用户可以通过实现Oracle的Extensibility Framework中的ODCIAggregat

Hive学习之自定义聚合函数

Hive支持用户自定义聚合函数(UDAF),这种类型的函数提供了更加强大的数据处理功能.Hive支持两种类型的UDAF:简单型和通用型.正如名称所暗示的,简单型UDAF的实现非常简单,但由于使用了反射的原因会出现性能的损耗,并且不支持长度可变的参数列表等特征.而通用型UDAF虽然支持长度可变的参数等特征,但不像简单型那么容易编写. 这篇文章将学习编写UDAF的规则,比如需要实现哪些接口,继承哪些类,定义哪些方法等, 实现通用型UDAF需要编写两个类:解析器和计算器.解析器负责UDAF的参数检查,

sql server 2012 自定义聚合函数(MAX_O3_8HOUR_ND) 计算最大的臭氧8小时滑动平均值

采用c#开发dll,并添加到sql server 中. 具体代码,可以用visual studio的向导生成模板. using System; using System.Collections; using System.Data; using Microsoft.SqlServer.Server; using System.Data.SqlTypes; using System.IO; using System.Text; [Serializable] [Microsoft.SqlServer

SQL SERVER 2005允许自定义聚合函数-表中字符串分组连接

不多说了,说明后面是完整的代码,用来将字符串型的字段的各行的值拼成一个大字符串,也就是通常所说的Concat 例如有如下表dict  ID  NAME  CATEGORY  1 RED  COLOR   2 BLUE COLOR  3 APPLE  FRUIT  4 ORANGE FRUIT 执行SQL语句:select category,dbo.concatenate(name) as names from dict group by category. 得到结果表如下  category  

Hive通用型自定义聚合函数(UDAF)

在使用hive进行数据处理时,经常会用到group by语法,但对分组的操作,hive没有mysql支持得好: group_concat([DISTINCT] 要连接的字段 [Order BY ASC/DESC 排序字段] [Separator '分隔符']) hive只有一个collect_set内置函数,返回去重后的元素数组,但我们可以通过编写UDAF,来实现想要的功能. 编写通用型UDAF需要两个类:解析器和计算器.解析器负责UDAF的参数检查,操作符的重载以及对于给定的一组参数类型来查找

Oracle 自定义实用函数

一.ctod 字符转为date, create or replace function ctod(str in varchar2) return date as begin return to_date(str,'yyyy-MM-dd hh24:mi:ss'); exception when others then return null; end; 使用示例:select ctod('2019-1-17') from dual; 二.splittb  字符串分割,分割之后返回行. CREATE