zoukankan      html  css  js  c++  java
  • oracle中wm_concat

    oracle中wm_concat

    oracle中wm_concat标识符无效原因:
    11gr2和12C上已经摒弃了wm_concat函数,当时我们很多程序员在程序中确使用了该函数,导致程序出现错误,为了减轻程序员修改程序的工作量,只有通过手工创建个wm_concat函数,来临时解决该问题,但是注意,及时创建了该函数,在使用的过程中,也需要用to_char(wm_concat())方式,才能完全替代之前的应用。

    解决方案

    1. 创建包、包体和函数

    以sys用户登录数据库,执行下面的命令

    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,
        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
    );
    

    定义类型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,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 ;
    

    2. 创建同义词并授权

    create public synonym WM_CONCAT_IMPL for sys.WM_CONCAT_IMPL;
    create public synonym wm_concat for sys.wm_concat;
    grant execute on WM_CONCAT_IMPL to public;
    grant execute on wm_concat to public;
    
  • 相关阅读:
    C# 把带有父子关系的数据转化为------树形结构的数据 ,以及 找出父子级关系的数据中里面的根数据Id
    基于角色的菜单按钮权限的设计及实现
    基于记忆性的中值滤波O(r)与O(1)复杂度的算法实现
    Canny算法检测边缘
    图像平滑去噪之高斯滤波器
    运动元素提取,基于帧间差分与背景差分
    基于RGB与HSI颜色模型的图像提取法
    基于阈值的灰度图像提取法
    C语言深入学习
    大津法实现图像二值化
  • 原文地址:https://www.cnblogs.com/zhijiancanxue/p/12507857.html
Copyright © 2011-2022 走看看