用一个实例讲解Oracle的自定义聚集函数

(网上找的,原地址不记得了,这里记载下,以后看)

 

Oracle数据库的定制功能十分强大。Oracle不但允许用户定制自己的函数,还可以定制自己的聚集函数和分析函数。 

本文将着重介绍使用自定义聚集函数建立一个字符串“sum”的示例: 

ExpandedBlockStart.gif 代码

SQL
>   CREATE   OR   REPLACE  TYPE T_LINK  AS  OBJECT (    STR   VARCHAR2 ( 30000 ),  
 STATIC 
FUNCTION  ODCIAGGREGATEINITIALIZE  (SCTX  IN  OUT T_LINK)  RETURN   NUMBER ,  
 MEMBER 
FUNCTION  ODCIAGGREGATEITERATE  (SELF  IN  OUT T_LINK, VALUE  IN   VARCHAR2 RETURN   NUMBER ,  
 MEMBER 
FUNCTION  ODCIAGGREGATETERMINATE  (SELF  IN  T_LINK, RETURNVALUE OUT  VARCHAR2 , FLAGS  IN   NUMBER RETURN   NUMBER ,  
 MEMBER 
FUNCTION  ODCIAGGREGATEMERGE  (SELF  IN  OUT T_LINK, CTX2  IN  T_LINK)  RETURN   NUMBER   
 )  

/   

类型已创建。  

 

 

ExpandedBlockStart.gif 代码

SQL
>   CREATE   OR   REPLACE  TYPE BODY T_LINK  IS   
 STATIC 
FUNCTION  ODCIAGGREGATEINITIALIZE  (SCTX  IN  OUT T_LINK)  RETURN   NUMBER   IS   
 
BEGIN   
 SCTX :
=  T_LINK( NULL );  
 
RETURN  ODCICONST.SUCCESS;  
 
END ;    

 MEMBER 
FUNCTION  ODCIAGGREGATEITERATE (SELF  IN  OUT T_LINK, VALUE  IN   VARCHAR2 RETURN   NUMBER   IS   
 
BEGIN  
 SELF.
STR  : =  SELF. STR   ||  VALUE; 
 
RETURN  ODCICONST.SUCCESS; 
 
END ;  

 MEMBER 
FUNCTION  ODCIAGGREGATETERMINATE  (SELF  IN  T_LINK, RETURNVALUE OUT  VARCHAR2 , FLAGS  IN   NUMBER RETURN   NUMBER   IS   
 
BEGIN   
 RETURNVALUE :
=  SELF. STR ;  
 
RETURN  ODCICONST.SUCCESS;  
 
END ;  
  
 MEMBER 
FUNCTION  ODCIAGGREGATEMERGE  (SELF  IN  OUT T_LINK, CTX2  IN  T_LINK)  RETURN   NUMBER   IS   
 
BEGIN   
 
NULL ;  
 
RETURN  ODCICONST.SUCCESS;  
 
END ;  

 
END ;  

 
/   

类型主体已创建。  

 

 


SQL
>   CREATE   OR   REPLACE   FUNCTION  F_LINK  (P_STR  VARCHAR2 RETURN   VARCHAR2   AGGREGATE USING T_LINK;  

/   

函数已创建。  

 

 


SQL
>   CREATE   TABLE  TEST (ID  NUMBER , NAME  VARCHAR2 ( 20 ));  

表已创建。  

 

 



SQL
>   INSERT   INTO  TEST  VALUES  ( 1 ' AAA ' );  

已创建 
1  行。  

 

 

ExpandedBlockStart.gif 代码

SQL
>   INSERT   INTO  TEST  VALUES  ( 2 ' BBB ' );  

已创建 
1  行。  

SQL
>   INSERT   INTO  TEST  VALUES  ( 1 ' ABC ' );  

已创建 
1  行。  

SQL
>   INSERT   INTO  TEST  VALUES  ( 3 ' CCC ' );  

已创建 
1  行。  

SQL
>   INSERT   INTO  TEST  VALUES  ( 2 ' DDD ' );  

已创建 
1  行。  

SQL
>   COMMIT ;  

提交完成。  

SQL
>  COL NAME FORMAT A60  

SQL
>   SELECT  ID, F_LINK(NAME) NAME  FROM  TEST  GROUP   BY  ID;  

ID NAME  

-- -------- ------------------------------------------------------  

1  AAAABC  

2  BBBDDD  

3  CCC  

 

 

转载于:https://www.cnblogs.com/zzyyll2/archive/2010/01/05/1639939.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值