如何在 Oracle 10g 中获取无效对象的错误列表

Posted

技术标签:

【中文标题】如何在 Oracle 10g 中获取无效对象的错误列表【英文标题】:How to fetch the list of errors for invalid objects in Oracle 10g 【发布时间】:2015-02-25 03:12:28 【问题描述】:

说明:我的数据库中有超过 200 个无效对象,原因可能只是几个对象(其他是由于依赖关系)。有没有办法我们可以选择对象名称和“错误原因”,因为它是无效的。

【问题讨论】:

【参考方案1】:

您可以查询[DBA/ALL/USER]_ERRORS。它描述了当前用户拥有的所有存储对象(视图、过程、函数、包和包体)的当前错误。

根据您拥有的权限选择要查询的视图:

DBA_:数据库中的所有对象 ALL_ :用户拥有且已被授予权限的所有对象 USER_ :用户拥有的所有对象

例如,

我创建了一个带有编译错误过程,我想查询错误详情

SQL> CREATE OR REPLACE PROCEDURE p
  2  BEGIN
  3  NULL
  4  END;
  5  /

Warning: Procedure created with compilation errors.

SQL>
SQL> SELECT NAME, TYPE, line, text FROM user_errors;

NAME  TYPE             LINE TEXT
----- ---------- ---------- --------------------------------------------------
P     PROCEDURE           2 PLS-00103: Encountered the symbol "BEGIN" when exp
                            ecting one of the following:

                               ( ; is with authid as cluster compress order us
                            ing compiled
                               wrapped external deterministic parallel_enable
                            pipelined
                               result_cache accessible


SQL>

在文档here中了解更多信息

【讨论】:

它只是显示无效的视图,而不是 SPs,Packages,functions 其他对象。我看到了文档,据此应该显示所有类型。我有只读权限,这可能是原因吗?由于文档声明 ::"ALL_ERRORS 描述了当前用户可访问的所有存储对象(视图、过程、函数、包和包主体)的当前错误。" *_errors 有 3 个视图。每个都可以根据特权进行访问。也许,您只能查看当前用户的对象。您能否检查输出是否与 user_errors 相同。这将确认您仅查看当前用户对象。如果对您有帮助,请将其标记为已回答。 谢谢 Lalit,我从 DBA_ERRORS 那里得到了详细信息。 太好了。感谢您的反馈。【参考方案2】:

您可以使用此视图进行检查:

SELECT OWNER, OBJECT_NAME, OBJECT_TYPE, STATUS
FROM ALL_OBJECTS
WHERE STATUS <> 'VALID';

分别。 USER_OBJECTSDBA_OBJECTS

ALL_ERRORS 不显示所有无效对象。

例子:

CREATE TABLE tt (a NUMBER);
CREATE OR REPLACE VIEW ttt AS SELECT * FROM tt;
DROP TABLE tt;

SELECT * FROM USER_ERRORS;

no rows selected.

但是,一旦获得条目选择视图后:

SELECT * FROM ttt;

Error at line 1
ORA-04063: view "xxxx.TTT" has errors

SELECT NAME, TYPE, TEXT FROM USER_ERRORS;

NAME    TYPE    TEXT
--------------------------------------------------------
TTT     VIEW    ORA-00942: table or view does not exist

【讨论】:

以上是关于如何在 Oracle 10g 中获取无效对象的错误列表的主要内容,如果未能解决你的问题,请参考以下文章

创建带有外键的表会出现错误 ORA-00904: : oracle 10g 中的无效标识符 [重复]

如何查看ORACLE 10G的用户名和口令?

Oracle 10g 声称一个包体有错误但它没有

如何重新编译使用 Oracle 10g 的 Wrap 实用程序加密的无效 PLSQL 包?

oracle 10g sql子句编译错误

如何使用 xPath (10g) 在 Oracle SQL extract() 中获取节点名称