自定义一个聚合函数,实现字符串Group by 相加,为什么返回参数中文显示乱码?
服务器字符集:us7Ascii(服务器是另家公司的,字符集不可更改)
客户端字符集:us7Ascii
试过其他的非聚合函数,字符串相加不显乱码。函数如下:
-- 定义类型 聚合函数的实质就是一个对象     
create or replace type strcat_type as object (    
    cat_string varchar2(4000),    
    --对象初始化     
    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    
)    
/    
   
/* 创建主体类型 */    
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( null );    
      return ODCIConst.Success;    
  end;    
  member function ODCIAggregateIterate(self IN OUT strcat_type,    
                                       value IN varchar2 )    
  return number    
  is   
  begin   
        /*字符串已','分割 */    
      self.cat_string := self.cat_string || ','|| value;    
      return ODCIConst.Success;    
  end;    
  member function ODCIAggregateTerminate(self IN Out strcat_type,    
                                         returnValue OUT varchar2,    
                                         flags IN number)    
  return number    
  is   
  begin   
        /*去除空(is null)*/    
      returnValue := ltrim(rtrim(self.cat_string,','),',');    
      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;    
/    
   
/*创建函数 func_strcat*/    
CREATE OR REPLACE FUNCTION func_strcat(input varchar2 )    
RETURN varchar2 -- 返回值    
PARALLEL_ENABLE AGGREGATE USING strcat_type; --使平行累加    
/