当前位置: 代码网 > it编程>数据库>Oracle > 解决Oracle19c ORA-00904:“WMSYS“.“WM_CONCAT“:标识符无效问题

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

2024年09月06日 Oracle 我要评论
oracle19c ora-00904:“wmsys“.“wm_concat“:标识符无效错误描述oracle19c ora-24344: 成功, 但出

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

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持代码网。

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com