我的数据库中有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”。
有什么建议吗?
有关错误代码ORA-04063的Oracle文档包括以下内容
对于视图,问题可能是视图定义查询到不存在的表的引用
不存在的表有时也表示您无权访问的表。
在哪个架构中你创建了视图?
您在视图上授予了哪些权限?
您在基础表(即表X)上授予了哪些权限?
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"
(用双引号),那么你需要以完全相同的方式引用它,包括case和quotes。
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
我通常在从视图的任何表中修改或删除属性名称时遇到同样的问题,然后发生此错误。我从表中删除了一个列并得到了这个错误,为了解决这个问题,我删除了视图中存在的属性但在表中不存在的情况下重新创建了视图