我得到ORA-00904:“ DBMS_METADATA”。“ GET_DDL”:运行dbms_metadata时出现无效的标识符错误。
该错误是因为列名或别名错误。我不确定为什么会得到它。
以下是显示错误的代码:我创建了一个表:
User.findOneAndUpdate({mobile: "9999999999999"}, { address: "test address" }, {'new': true} )
我插入一行数据:
create table test_table (
column1 varchar2(300));
我尝试为其获取DDL:
insert into test_table values (55);
这是错误:
SELECT DBMS_METADATA.GET_DDL('TABLE','test_table') FROM dual;
我检查了权限,似乎我拥有正确的权限:
>> SELECT DBMS_METADATA.GET_DDL('TABLE','test_table') FROM dual
*
Error at line 1
ORA-00904: "DBMS_METADATA"."GET_DDL": invalid identifier
我的用户(又名架构)在该列表中。
以下是我认为的文档:https://docs.oracle.com/cd/B19306_01/appdev.102/b14258/d_metada.htm#i1016867
答案 0 :(得分:2)
以SYS身份运行此命令:
grant execute on sys.dbms_metadata to public;
授予您特定用户的访问权限可能已经解决了您当前的问题,但是该软件包确实确实需要整个系统使用。许多第三方程序都依赖于DBMS_METADATA
。默认情况下,应将该软件包授予PUBLIC
。
一些旧版本的STIG(安全技术实施指南,几乎每个审核员都将其用作其安全脚本的基础),将撤消对公共软件包的访问。但这甚至在10年前还是一个愚蠢的想法,而且无论如何现在的STIG都不是。