Oracle12C关于WM_CONCAT的创建函数

Oracle12C 中,去掉了 WM_CONCAT函数。

网上众多的还是恢复wmsys 用户,然后创建用户,授权等等,太过繁琐。

那就不能创建一个用户自己的函数,不得了。所有使用的非系统函数,都变成自己的呗。

 

函数创建如下:

 

CREATE OR REPLACE TYPE WM_CONCAT_IMPL AS OBJECT  
-- 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,  PARAM1 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
);  
/
--定义类型body:  
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,PARAM1 IN VARCHAR2)  RETURN NUMBER  IS  
    BEGIN  
		IF(CURR_STR IS NOT NULL) THEN  
		CURR_STR := CURR_STR || ',' || PARAM1;  
		ELSE  
		CURR_STR := PARAM1;  
		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(PARAM1 VARCHAR2)  RETURN VARCHAR2 AGGREGATE USING WM_CONCAT_IMPL ;  

 

亲测,在Oracle12C的PDB上,可用。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值