`
sea0108
  • 浏览: 52997 次
  • 性别: 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 函数,使得聚集连接字符串变得很容易。并且允许使用我们指定连接串中的字段顺序

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

    自定义聚集函数拼接字符串,根据网上常见的例子加以改进,可以自定义分隔符(利用的自定义type)。

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

    大家用oracle数据库里面的wmsys.wm_concat函数有没有遇见过字符串缓冲区太小的情况? 针对这种情况我写了个自定义聚合函数 是clob版的。

    oracle学习文档 笔记 全面 深刻 详细 通俗易懂 doc word格式 清晰 连接字符串

    varchar2 1~4000字节 可变长度字符串,与CHAR类型相比,使用VARCHAR2可以节省磁盘空间,但查询效率没有char类型高 数值类型 Number(m,n) m(1~38) n(-84~127) 可以存储正数、负数、零、定点数和精度为38位的浮点数...

    Oracle课件.pdf

    2.3聚合函数 . 3. 创建表和约束 3.1 Oracle常用数据类型 3.2创建表 3.3表的约束 4. 数据操作语言(DML) 4.1数据插入 4.2更新数据 4.3删除数据 4.4 TRUNCATE(DDL命令) 5. 操作符 5.1算术运算 5.2关系...

    关系型数据库管理系统之MySql学习总结

    文章目录数据库介绍MySql介绍添加数据导入数据查询数据内连接左外连接/右外连接子查询约束函数聚合函数分组函数数学函数字符串函数日期时间函数条件判断函数系统信息函数加密函数格式化函数自定义函数视图事务存储...

    C#开发经验技巧宝典

    0909 如何对字符串进行查询 532 0910 如何进行单条数据的添加 533 0911 如何进行批量数据的添加 533 0912 如何对数据进行修改 534 0913 如何对数据进行删除 534 0914 对数据库数据进行局部删除 534 ...

    C#编程经验技巧宝典

    76 &lt;br&gt;0111 计算字符串中子字符串出现的次数 76 &lt;br&gt;0112 获得字符串中大写字母的个数 77 &lt;br&gt;0113 获得某字符在字符串中最后出现的位置 78 &lt;br&gt;0114 如何找出字符串中某一字符的所有位置 78...

    C#程序开发范例宝典(第2版).part13

    实例058 为RichTextBox控件添加自定义滚动条 68 实例059 在RichTextBox控件中实现关键字描红 69 实例060 在RichTextBox控件中实现项目编号功能 71 实例061 设置RichTextBox控件中文本对齐方式 74 2.4 ListBox...

    C#程序开发范例宝典(第2版).part08

    实例058 为RichTextBox控件添加自定义滚动条 68 实例059 在RichTextBox控件中实现关键字描红 69 实例060 在RichTextBox控件中实现项目编号功能 71 实例061 设置RichTextBox控件中文本对齐方式 74 2.4 ListBox...

    C#程序开发范例宝典(第2版).part02

    实例058 为RichTextBox控件添加自定义滚动条 68 实例059 在RichTextBox控件中实现关键字描红 69 实例060 在RichTextBox控件中实现项目编号功能 71 实例061 设置RichTextBox控件中文本对齐方式 74 2.4 ListBox...

    C#程序开发范例宝典(第2版).part12

    实例058 为RichTextBox控件添加自定义滚动条 68 实例059 在RichTextBox控件中实现关键字描红 69 实例060 在RichTextBox控件中实现项目编号功能 71 实例061 设置RichTextBox控件中文本对齐方式 74 2.4 ListBox...

Global site tag (gtag.js) - Google Analytics