oracle行转列相关函数

本文介绍了如何在Oracle数据库中创建自定义聚合函数STRING_AGG_TYPE。通过定义类型及其实现的具体成员函数,实现了字符串聚合的功能。具体包括初始化、迭代、终止和合并等操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

应需求分析的要求,需要对查询结果做个显示调整,我这里写了一个函数和一个类来实现这个功能,具体代码如下:
 
1. type:
 
     CREATE OR REPLACE TYPE "STRING_AGG_TYPE"                                          as object
(
   total varchar2(4000),
   static function
        ODCIAggregateInitialize(sctx IN OUT string_agg_type )
        return number,
   member function
        ODCIAggregateIterate(self IN OUT string_agg_type ,
                             value IN varchar2 )
        return number,
   member function
        ODCIAggregateTerminate(self IN string_agg_type,
                               returnValue OUT  varchar2,
                               flags IN number)
        return number,
   member function
        ODCIAggregateMerge(self IN OUT string_agg_type,
                           ctx2 IN string_agg_type)
        return number
)
 
2.type body:
 
 CREATE OR REPLACE TYPE BODY "STRING_AGG_TYPE"
is
static function ODCIAggregateInitialize(sctx IN OUT string_agg_type)
return number
is
begin
    sctx := string_agg_type( null );
    return ODCIConst.Success;
end;
member function ODCIAggregateIterate(self IN OUT string_agg_type,
                                     value IN varchar2 )
return number
is
begin
    self.total := self.total || ',' || value;
    return ODCIConst.Success;
end;
member function ODCIAggregateTerminate(self IN string_agg_type,
                                       returnValue OUT varchar2,
                                       flags IN number)
return number
is
begin
    returnValue := ltrim(self.total,',');
    return ODCIConst.Success;
end;
member function ODCIAggregateMerge(self IN OUT string_agg_type,
                                   ctx2 IN string_agg_type)
return number
is
begin
    self.total := self.total || ctx2.total;
    return ODCIConst.Success;
end;
end;
 
3.function:
 
CREATE OR REPLACE FUNCTION join_char(input varchar2 )
RETURN varchar2
PARALLEL_ENABLE AGGREGATE USING string_agg_type;
 
具体示例如下:
 
25618347_201301141639521.thumb.jpg
 
 
记录一下~

fj.pnghzl.jpg

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/25618347/viewspace-752642/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/25618347/viewspace-752642/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值