ORA-04063: 视图有错误
ORA-04063: view has errors
我的数据库中有 3 个用户(模式)。
用户A持有table 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: view "User_C.Z" has errors.
我试图通过 SQL PLUS 创建它:它是在编译错误的情况下创建的,但是 "show errors" 命令 returns "no errors".
有什么建议吗?
关于错误代码 ORA-04063 的 Oracle 文档包括以下内容
For views, the problem could be a reference in the view's defining query to a non-existent table
不存在 table 有时也意味着您无权访问。
您是在谁的架构中创建视图的?
您授予了哪些视图权限?
您对基础 table(即 table 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"
(用双引号引起来),那么您需要以完全相同的方式引用它,包括大小写和引号。
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
当从视图的任何 table 中修改或删除属性名称时,我通常会遇到同样的问题,然后会发生此错误。我从 table 中删除了一列并收到此错误,为了解决它,我在删除视图中存在但 table
中不存在的属性后重新创建了视图
我的数据库中有 3 个用户(模式)。
用户A持有table 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: view "User_C.Z" has errors.
我试图通过 SQL PLUS 创建它:它是在编译错误的情况下创建的,但是 "show errors" 命令 returns "no errors".
有什么建议吗?
关于错误代码 ORA-04063 的 Oracle 文档包括以下内容
For views, the problem could be a reference in the view's defining query to a non-existent table
不存在 table 有时也意味着您无权访问。
您是在谁的架构中创建视图的?
您授予了哪些视图权限?
您对基础 table(即 table 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"
(用双引号引起来),那么您需要以完全相同的方式引用它,包括大小写和引号。
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
当从视图的任何 table 中修改或删除属性名称时,我通常会遇到同样的问题,然后会发生此错误。我从 table 中删除了一列并收到此错误,为了解决它,我在删除视图中存在但 table
中不存在的属性后重新创建了视图