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

 更新时间:2024年07月03日 09:46:40   作者:huryer  
这篇文章主要介绍了解决Oracle19c ORA-00904:“WMSYS“.“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 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 ;
/

--创建完成,给其创建同义词及授权,以供其他用户能正常使用。
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的时候,报错:

出错原因

数据库里没有WMSYS用户

解决办法

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

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • DBeaver首次连接Oracle驱动问题及解决

    DBeaver首次连接Oracle驱动问题及解决

    本文介绍了使用DBeaver连接Oracle数据库时,配置驱动连接的方法,需要在“类路径”->“全局库”中添加ojdbc6.jar包,而直接添加文件无效
    2026-05-05
  • ProC 连接Oracle代码

    ProC 连接Oracle代码

    一段简单的ProC连接Oracle的代码
    2009-06-06
  • 通过PLSQL Developer创建Database link,DBMS_Job,Procedure,实现Oracle跨库传输数据的方法(推荐)

    通过PLSQL Developer创建Database link,DBMS_Job,Procedure,实现Oracle

    这篇文章主要介绍了通过PLSQL Developer创建Database link,DBMS_Job,Procedure,实现Oracle跨库传输数据,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-07-07
  • Oracle undo_management参数不一致错误

    Oracle undo_management参数不一致错误

    因RAC的undo_management参数不一致导致Oracle数据库mount报ORA-01105 ORA-01606错误,本文就这个问题
    2013-11-11
  • ORACLE实现自定义序列号生成的方法

    ORACLE实现自定义序列号生成的方法

    这篇文章主要为大家详细介绍了ORACLE实现自定义序列号生成的方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2016-10-10
  • oracle查询字段类型长度等字段信息简单代码示例

    oracle查询字段类型长度等字段信息简单代码示例

    这篇文章主要给大家介绍了关于oracle查询字段类型长度等字段信息的相关资料,文中介绍了如何查询Oracle数据库中表的字符集和字段长度类型,包括VARCHAR2字段的两种表示方式及其区别,需要的朋友可以参考下
    2024-12-12
  • 常用Oracle分析函数大全

    常用Oracle分析函数大全

    本文是小编日常手机整理的有关oracle分析函数,oracle分析函数功能非常强大,工作也常用到,所以大家务必要掌握,对oracle分析函数知识感兴趣的朋友一起看看吧
    2016-08-08
  • Oracle 触发器的使用小结

    Oracle 触发器的使用小结

    将触发器应用在插入表时相应字段唯一值
    2009-05-05
  • Oracle 11g如何清理数据库的历史日志详解

    Oracle 11g如何清理数据库的历史日志详解

    这篇文章主要给大家介绍了关于Oracle 11g如何清理数据库历史日志的相关资料,文中通过示例代码介绍的非常详细,对大家具有一定的参考学习价值,需要的朋友们下面跟着小编来一起学习学习吧。
    2017-07-07
  • Oracle 存储过程 procedure不允许使用 return 语句的解决方案

    Oracle 存储过程 procedure不允许使用 return 语句的解决方

    Oracle存储过程中RETURN语句的使用存在严格限制:在存储过程(PROCEDURE)中不允许使用,否则会引发PLS-00372编译错误;而在函数(FUNCTION)中则必须使用RETURN并返回指定值,如需在存储过程中实现提前退出功能,建议采用GOTO跳转、条件判断或异常处理等替代方案
    2026-05-05

最新评论