ORA-04063:视图有错误

时间:2018-02-02 09:43:06

标签: sql oracle ddl sql-view

我的数据库中有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创建它:它是在编译错误的情况下创建的,但“show errors”命令返回“no errors”。

有什么建议吗?

3 个答案:

答案 0 :(得分:3)

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

答案 1 :(得分:2)

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

  

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

不存在的表有时也表示您无法访问的表。

您在哪个架构中创建了视图?

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

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

答案 2 :(得分:0)

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