zoukankan      html  css  js  c++  java
  • 在12C上创建wm_concat函数

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

    一.解锁wmsys用户

    alter user wmsys account unlock;

    二.创建包、包体和函数

    以wmsys用户登录数据库,执行下面的命令
    1. CREATE OR REPLACE TYPE WM_CONCAT_IMPL AS OBJECT  
    2. -- AUTHID CURRENT_USER AS OBJECT  
    3. (  
    4. CURR_STR VARCHAR2(32767),   
    5. STATIC FUNCTION ODCIAGGREGATEINITIALIZE(SCTX IN OUT WM_CONCAT_IMPL) RETURN NUMBER,  
    6. MEMBER FUNCTION ODCIAGGREGATEITERATE(SELF IN OUT WM_CONCAT_IMPL,  
    7. P1 IN VARCHAR2) RETURN NUMBER,  
    8. MEMBER FUNCTION ODCIAGGREGATETERMINATE(SELF IN WM_CONCAT_IMPL,  
    9. RETURNVALUE OUT VARCHAR2,  
    10. FLAGS IN NUMBER)  
    11. RETURN NUMBER,  
    12. MEMBER FUNCTION ODCIAGGREGATEMERGE(SELF IN OUT WM_CONCAT_IMPL,  
    13. SCTX2 IN WM_CONCAT_IMPL) RETURN NUMBER  
    14. );  
    15. /  
    16.   
    17. --定义类型body:  
    18. CREATE OR REPLACE TYPE BODY WM_CONCAT_IMPL  
    19. IS  
    20. STATIC FUNCTION ODCIAGGREGATEINITIALIZE(SCTX IN OUT WM_CONCAT_IMPL)  
    21. RETURN NUMBER  
    22. IS  
    23. BEGIN  
    24. SCTX := WM_CONCAT_IMPL(NULL) ;  
    25. RETURN ODCICONST.SUCCESS;  
    26. END;  
    27. MEMBER FUNCTION ODCIAGGREGATEITERATE(SELF IN OUT WM_CONCAT_IMPL,  
    28. P1 IN VARCHAR2)  
    29. RETURN NUMBER  
    30. IS  
    31. BEGIN  
    32. IF(CURR_STR IS NOT NULL) THEN  
    33. CURR_STR := CURR_STR || ',' || P1;  
    34. ELSE  
    35. CURR_STR := P1;  
    36. END IF;  
    37. RETURN ODCICONST.SUCCESS;  
    38. END;  
    39. MEMBER FUNCTION ODCIAGGREGATETERMINATE(SELF IN WM_CONCAT_IMPL,  
    40. RETURNVALUE OUT VARCHAR2,  
    41. FLAGS IN NUMBER)  
    42. RETURN NUMBER  
    43. IS  
    44. BEGIN  
    45. RETURNVALUE := CURR_STR ;  
    46. RETURN ODCICONST.SUCCESS;  
    47. END;  
    48. MEMBER FUNCTION ODCIAGGREGATEMERGE(SELF IN OUT WM_CONCAT_IMPL,  
    49. SCTX2 IN WM_CONCAT_IMPL)  
    50. RETURN NUMBER  
    51. IS  
    52. BEGIN  
    53. IF(SCTX2.CURR_STR IS NOT NULL) THEN  
    54. SELF.CURR_STR := SELF.CURR_STR || ',' || SCTX2.CURR_STR ;  
    55. END IF;  
    56. RETURN ODCICONST.SUCCESS;  
    57. END;  
    58. END;  
    59. /  
    60. --自定义行变列函数:  
    61. CREATE OR REPLACE FUNCTION wm_concat(P1 VARCHAR2)  
    62. RETURN VARCHAR2 AGGREGATE USING WM_CONCAT_IMPL ;  
    63. /  

    三.创建同义词并授权

        create public synonym WM_CONCAT_IMPL for wmsys.WM_CONCAT_IMPL  
         
        create public synonym wm_concat for wmsys.wm_concat  
        
          
        grant execute on WM_CONCAT_IMPL to public  
        
        grant execute on wm_concat to public  
        
    
     
  • 相关阅读:
    多线程——newFixedThreadPool线程池
    mysql SQL优化之嵌套查询-遁地龙卷风
    mysql练习题-查询同时参加计算机和英语考试的学生的信息-遁地龙卷风
    mysql存储过程编写-入门案例-遁地龙卷风
    编程轶事-java中的null-遁地龙卷风
    正逆向思维-编程轶事-遁地龙卷风
    MyBatis处理一行数据-MyBatis使用sum语句报错-MyBatis字段映射-遁地龙卷风
    MyBatis框架在控制台打印Sql语句-遁地龙卷风
    3d转换-正方体-Html5Css3-遁地龙卷风
    突破瓶颈-遁地龙卷风
  • 原文地址:https://www.cnblogs.com/wangzhuxing/p/5976840.html
Copyright © 2011-2022 走看看