开发者

解决Oracle19c ORA-00904:“WMSYS“.“WM_CONCAT“:标识符无效问题

目录
  • oracle19c ORA-00904:“W编程客栈MSYS“.“WM_CONCAT“:标识符无效
    • 错误描述
    • 解决办法
  • 处理ora-00904:wm_concat标识符无效
    • 问题描述
    • 出错原因
    • 解决办法
  • 总结

    Oracle19c ORA-00904:“WMSYS“.“WM_CONCAT“:标识符无效

    错误描述

    • oracle19c ORA-24344: 成功, 但出现编译错误
    • ORA-00904: “WMSYS”.“WM_CONCAT”: 标识符无效

    解决办法

    -- 设置实例
    export ORACLE_SID=test1
    
    --首先使用dba账号登录oracle数据库
    sqlplus / as sysdba
    
    --解锁wmsys用户
    alter user wmsys account unlock;
     
    --并为wmsys用户授权,可根据需要授权,不建议授权所有权限
    grant all privileges to wmsys;
     
    --如果不知道wmsys用户的密码,可以修改其密码
    alter user wmsys identified by 123456;
    
    -- 切换到pdb
    alter session set container=xxx;
    
    --并为wmsys用户授权,可根据需要授权,不建议授权所有权限
    grant all privileges to wmsys;
    
    --使用wmsys用户登录数据库
    conn wmsys/123456
    
    -- 切换到pdb,(必须在pdb中创建函数)
    alter session set container=xxx;
    
    --在wmsys下创建可用的wm_concat函数,直接执行以下语句
    --定义类型
    CREATE OR REPLACE TYPE WM_CONCAT_IMPL 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 VARCHAR2php) 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)
    R编程客栈ETURN 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)
    phpRETURN 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 FUNCTIO编程客栈N wm_concat(P1 VARCHAR2)
    RETURN VARCHAR2 AGGREGATE USING WM_CONCAT_IMPL ;
    /
    
    --创建完成,给其创建同义词及授权,以供其他用户能正常使用。
    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
    /
    

    处理ora-00904:wm_concat标识符无效

    问题描述

    同事在部署zabbix监控oracle的时候,报错:

    解决Oracle19c ORA-00904:“WMSYS“.“WM_CONCAT“:标识符无效问题

    出错原因

    数据库里没有WMSYS用户

    解决办法

    @?/rdbms/admin/owmctab.plb
    @?/rdbms/admin/owmaggrs.plb
    @?/rdbms/admin/owmaggrb.plb

    总结

    以上为个人经验,希望能给大家一个参考,也希望大家多多支持编程客栈(www.devze.com)。

    0

    上一篇:

    下一篇:

    精彩评论

    暂无评论...
    验证码 换一张
    取 消

    最新数据库

    数据库排行榜