Oracle 9i 逗号分割函数


1、创建type头 

搜索
create  or  replace  type string_sum_obj  as  object ( 
--聚合函数的实质就是一个对象 
      sum_string varchar2(4000), 
      static  function  ODCIAggregateInitialize(v_self  in  out  string_sum_obj)  return  number, 
      --对象初始化 
      member  function  ODCIAggregateIterate(self  in  out  string_sum_obj, value  in  varchar2)  return  number, 
      --聚合函数的迭代方法(这是最重要的方法) 
      member  function  ODCIAggregateMerge(self  in  out  string_sum_obj, v_next  in  string_sum_obj)  return  number, 
      --当查询语句并行运行时,才会使用该方法,可将多个并行运行的查询结果聚合 
       
      member  function  ODCIAggregateTerminate(self  in  string_sum_obj, return_value  out  varchar2 ,v_flags  in  number)  return  number 
      --终止聚集函数的处理,返回聚集函数处理的结果. 
)


2、创建type具体

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
create  or  replace  type body string_sum_obj  is 
      static  function  ODCIAggregateInitialize(v_self  in  out  string_sum_obj)  return  number  is 
      begin 
          v_self := string_sum_obj( null ); 
          return  ODCICONST.Success; 
      end
      member  function  ODCIAggregateIterate(self  in  out  string_sum_obj, value  in  varchar2)  return  number  is 
      begin 
           /* 连接,解决逗号分隔第一个字母是逗号的问题 */    
            if  not  self.sum_string  is  null  then 
           self.sum_string := self.sum_string || ',' || value; 
           else 
           self.sum_string := self.sum_string || value; 
           end  if; 
           return  ODCICONST.Success; 
           /* 最大值 */ 
           if self.sum_string<value  then 
               self.sum_string:=value; 
           end  if; 
           /* 最小值 */ 
           if self.sum_string>value  then 
        self.sum_string:=value;           
           end  if; 
            
           return  ODCICONST.Success; 
      end
      member  function  ODCIAggregateMerge(self  in  out  string_sum_obj, v_next  in  string_sum_obj)  return  number  is 
      begin 
           /* 连接 */    
           self.sum_string := self.sum_string || v_next.sum_string; 
           return  ODCICONST.Success; 
           /* 最大值 */ 
           if self.sum_string<v_next.sum_string  then 
               self.sum_string:=v_next.sum_string; 
           end  if; 
 
           /* 最小值 */ 
           if self.sum_string>v_next.sum_string  then 
               self.sum_string:=v_next.sum_string;           
           end  if; 
            
           return  ODCICONST.Success; 
      end
      member  function  ODCIAggregateTerminate(self  in  string_sum_obj, return_value  out  varchar2 ,v_flags  in  number)  return  number  is 
      begin 
           return_value:= self.sum_string; 
           return  ODCICONST.Success; 
      end
end ;






3、创建函数

1
2
create  or  replace  function  wm_concat(value Varchar2)  return  Varchar2 
      parallel_enable aggregate using string_sum_obj;

创建后,这个跟标准的wm_concat没区别,你要把逗号换成横杠的话,replace一下就可以



猜你喜欢

转载自blog.csdn.net/u013625182/article/details/79279528