【问题标题】:ORA-04063: view has errorsORA-04063: 视图有错误
【发布时间】:2018-07-12 18:50:49
【问题描述】:

我的数据库中有 3 个用户(模式)。

用户 A 持有表 X

我为用户 B 创建了一个视图 Y,为用户 C 创建了一个视图 Z。 视图是相同的:

 CREATE OR REPLACE FORCE EDITIONABLE VIEW "user_name"."view_name" ("field_1", "field_2") AS 
  SELECT field1_1
,      field2_2
FROM   User_A.X;

第一个视图工作正常;对于第二个我在尝试查看数据(来自 SQL 开发人员)时出现以下错误:

ORA-04063:视图“User_C.Z”有错误。

我尝试通过 SQL PLUS 创建它:它创建时出现编译错误,但“显示错误”命令返回“无错误”。

有什么建议吗?

【问题讨论】:

  • 您真的创建了用户名区分大小写的用户吗? "user_name" 是与 user_name 不同的用户名。你是如何创建user_a 的?如果您还使用双引号创建了它,则可能需要使用"User_A""user_a",具体取决于您创建它的方式。列名也是如此,field_1"field_1" 的名称不同

标签: sql oracle ddl sql-view


【解决方案1】:

show errors SQL*Plus 命令默认报告最后创建的 PL/SQL 对象的错误。要显示视图的错误,您必须指定它:

SQL> create or replace force view someview as select * from nosuchtable;

Warning: View created with compilation errors.

SQL> show errors
No errors.

SQL> show errors view someview
Errors for VIEW SOMEVIEW:

LINE/COL   ERROR
---------- --------------------------------------------------------------------
0/0        ORA-00942: table or view does not exist
0/0        ORA-54039: table must have at least one column that is not invisible

或者你可以直接查询user_errors:

SQL> select line, text from user_errors where name = 'SOMEVIEW' order by sequence;
LINE TEXT
---- --------------------------------------------------------------------------------
   0 ORA-54039: table must have at least one column that is not invisible
   0 ORA-00942: table or view does not exist

如果您确实将其命名为 "view_name"(双引号),那么您需要以完全相同的方式引用它,包括大小写和引号。

show errors view "someview"

select line, text from user_errors where name = 'someview' order by sequence;

或者,尝试创建不带force 选项的视图:

SQL> create or replace view someview as select * from nosuchtable;
create or replace view someview as select * from nosuchtable
                                                 *
ERROR at line 1:
ORA-00942: table or view does not exist

或者,在没有 create view 部分的情况下自行测试查询:

SQL> select * from nosuchtable;
select * from nosuchtable
              *
ERROR at line 1:
ORA-00942: table or view does not exist

【讨论】:

    【解决方案2】:

    有关错误代码 ORA-04063 的 Oracle 文档包括以下内容

    对于视图,问题可能是视图定义查询中对不存在的表的引用

    不存在的表有时也意味着您无权访问。

    您在谁的架构中创建了视图?

    您在视图上授予了哪些权限?

    您在基础表(即表 X)上授予了哪些权限?

    【讨论】:

    • 我需要将 USER C 的 SELECT 和 REFERENCES 权限添加到基础表中。用户 B 已经拥有它们。
    【解决方案3】:

    当从视图的任何表中修改或删除属性名称时,我通常会遇到相同的问题,然后会发生此错误。我从表中删除了一个列并收到此错误,为了解决它,我在删除视图中存在但表中不存在的属性后重新创建视图

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-05-10
      • 1970-01-01
      • 1970-01-01
      • 2013-04-14
      • 2016-08-01
      相关资源
      最近更新 更多