解决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
总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。
相关文章
查看Oracle数据库中UNDO表空间的使用情况(最新推荐)
Oracle数据库中查看UNDO表空间使用情况的4种方法:DBA_TABLESPACES和DBA_DATA_FILES提供基本信息,V$UNDOSTAT显示使用统计信息,DBA_FREE_SPACE查看空闲空间,V$TRANSACTION显示当前事务占用的UNDO情况,本文介绍Oracle数据库中UNDO表空间的使用情况,感兴趣的朋友一起看看吧2025-03-03
oracle实现动态查询前一天早八点到当天早八点的数据功能示例
这篇文章主要介绍了oracle实现动态查询前一天早八点到当天早八点的数据功能,涉及Oracle针对日期时间的运算与查询相关操作技巧,需要的朋友可以参考下2019-10-10
oracle中where 子句和having子句中的区别介绍
这篇文章主要介绍了在oracle中where 子句和having子句中的区别,本文通过sql语句给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下2018-12-12


最新评论