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

Use*_*r M 4 oracle plsql oracle10g

说明:我的数据库中有200多个无效对象,原因可能只有几个对象(其他因为依赖性).有没有办法可以选择对象名称和"错误原因",因为它无效.

Lal*_*r B 9

您可以查询[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>
Run Code Online (Sandbox Code Playgroud)

这里的文档中阅读更多相关信息

  • *_errors有3个视图.每个都可以根据权限进行访问.也许,您只能查看当前用户的对象.你能检查输出是否与user_errors相同.这将确认您仅查看当前用户对象.如果有帮助,请将其标记为已回答. (2认同)

Wer*_*eit 5

您可以查看此视图​​:

SELECT OWNER, OBJECT_NAME, OBJECT_TYPE, STATUS
FROM ALL_OBJECTS
WHERE STATUS <> 'VALID';
Run Code Online (Sandbox Code Playgroud)

分别 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.
Run Code Online (Sandbox Code Playgroud)

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

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
Run Code Online (Sandbox Code Playgroud)