wm_concat的源代码

本文详细介绍了如何在Oracle中创建一个名为wm_concat的自定义聚合函数,该函数用于将多个VARCHAR2类型的值合并成一个字符串,以逗号分隔。通过odciaggregateinitialize、odciaggregateiterate、odciaggregateterminate和odciaggregatemerge等ODCI方法实现,适用于数据聚合操作。
摘要由CSDN通过智能技术生成
CREATE OR REPLACE TYPE wm_concat_impl 
    AUTHID CURRENT_USER 
AS OBJECT (
    curr_str VARCHAR2 (32767), 
    STATIC FUNCTION odciaggregateinitialize (sctx IN OUT wm_concat_impl) 
     RETURN NUMBER, 
    MEMBER FUNCTION odciaggregateiterate (
     SELF IN OUT wm_concat_impl, 
     p1  IN  VARCHAR2 
    ) 
     RETURN NUMBER, 
    MEMBER FUNCTION odciaggregateterminate (
     SELF   IN  wm_concat_impl, 
     returnvalue OUT  VARCHAR2, 
     flags   IN  NUMBER 
    ) 
     RETURN NUMBER, 
    MEMBER FUNCTION odciaggregatemerge (
     SELF IN OUT wm_concat_impl, 
     sctx2 IN  wm_concat_impl 
    ) 
     RETURN NUMBER 
); 
/

CREATE OR REPLACE TYPE BODY wm_concat_impl 
IS 
    STATIC FUNCTION odciaggregateinitialize (sctx IN OUT wm_concat_impl) 
     RETURN NUMBER 
    IS 
    BEGIN 
     sctx := wm_concat_impl (NULL); 
     RETURN odciconst.success; 
    END; 
    MEMBER FUNCTION odciaggregateiterate (
     SELF IN OUT wm_concat_impl, 
     p1  IN  VARCHAR2 
    ) 
     RETURN NUMBER 
    IS 
    BEGIN 
     IF (curr_str IS NOT NULL) 
     THEN 
     curr_str := curr_str || ',' || p1; 
     ELSE 
     curr_str := p1; 
     END IF; 

     RETURN odciconst.success; 
    END; 
    MEMBER FUNCTION odciaggregateterminate (
     SELF   IN  wm_concat_impl, 
     returnvalue OUT  VARCHAR2, 
     flags   IN  NUMBER 
    ) 
     RETURN NUMBER 
    IS 
    BEGIN 
     returnvalue := curr_str; 
     RETURN odciconst.success; 
    END; 
    MEMBER FUNCTION odciaggregatemerge (
     SELF IN OUT wm_concat_impl, 
     sctx2 IN  wm_concat_impl 
    ) 
     RETURN NUMBER 
    IS 
    BEGIN 
     IF (sctx2.curr_str IS NOT NULL) 
     THEN 
     SELF.curr_str := SELF.curr_str || ',' || sctx2.curr_str; 
     END IF; 

     RETURN odciconst.success; 
    END; 
END; 
/

CREATE OR REPLACE FUNCTION wm_concat (p1 VARCHAR2) 
    RETURN VARCHAR2 
    AGGREGATE USING wm_concat_impl; 
/

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值