【发布时间】:2018-04-07 11:13:56
【问题描述】:
我收到这个错误
java.sql.SQLException: ORA-31603: object "XXX" of type TRIGGER not found in schema "YYYY"
ORA-06512: at "SYS.DBMS_METADATA", line 6069
ORA-06512: at "SYS.DBMS_METADATA", line 8666
ORA-06512: at line 1
当尝试使用以下 sql 获取触发器的 sql 时。
SELECT
s.OWNER AS SCHEMA,
s.object_name AS NAME,
dbms_metadata.get_DDL(s.object_type,s.object_name,s.owner) AS "SQL"
FROM SYS.DBA_OBJECTS s
WHERE s.OBJECT_TYPE IN ('TRIGGER')
我有以下 USER_ROLE_PRIVS:SELECT_CATALOG_ROLE
USER_ROLE_PRIVS
数据库版本:
Oracle Database 12c Enterprise Edition Release 12.1.0.2.0 - 64bit Production
PL/SQL Release 12.1.0.2.0 - Production
"CORE 12.1.0.2.0 Production"
TNS for IBM/AIX RISC System/6000: Version 12.1.0.2.0 - Production
NLSRTL Version 12.1.0.2.0 - Production
我试图找出问题所在,但我走到了死胡同。 我搜索的所有地方都说我需要的只是 SELECT_CATALOG_ROLE ,除非我在一个过程中运行它。 我正在通过 JDBC 连接运行 sql,但是即使我使用 sql 客户端运行它,我仍然会收到错误。
如果您需要了解我拥有的任何其他权限,请告诉我。我已经知道使用 DBA_SOURCE 的解决方法,我只需要了解为什么我不能使用 get_DDL,因为根据 oracle 文档,我只需要 SELECT_CATALOG_ROLE 就可以使用它。
编辑:一些注释。
此查询在扫描其他数据库时一直正常运行我不知道为什么这在此环境中不起作用。
我不想使用 DBA_SOURCE,因为它省略了一些语句,例如“创建触发器”,我想使用可用的函数而不是手动操作。 (但是,如果没有人能弄清楚为什么会发生这种情况,我将不得不重新使用 DBA_SOURCE)
该查询有一个所有者过滤器,我没有在此处添加它,因为我想在没有任何其他不必要信息的情况下呈现问题
【问题讨论】:
标签: oracle permissions user-roles