简单的答案是您的语法不正确。您必须指定DISABLE。
NOVALIDATE 禁用主键验证,在视图中这是默认设置,因此会自动包含在内;但是如果你使用它会更清楚,因为在一个可爱的双重否定中,disable novalidate 禁用了禁用主键的能力。
rely 是可选的;它指定创建视图时是否考虑主键。 rely的反义词是norely。
创建视图约束有很多限制,因为它依赖于下表,正如@RC 已经指出的那样,它并不值得。但是,如果您只需要它来记录文档,那么您就可以了:
SQL> create table tmp_test ( a number(10), b varchar2(120) );
Table created.
SQL>
SQL> insert into tmp_test
2 select level, 'b'
3 from dual
4 connect by level <= 20
5 ;
20 rows created.
SQL> commit ;
Commit complete.
SQL>
SQL> alter table tmp_test
2 add constraint tmp_test_pk
3 primary key (a)
4 using index;
Table altered.
SQL>
SQL> create or replace view v_tmp_test (a, b
2 , constraint v_tmp_test_pk primary key (a) rely disable novalidate) as
3 select a, b
4 from tmp_test
5 ;
View created.
SQL>
来自documentation:
查看约束
Oracle 不强制执行视图约束。但是,对视图的操作
受制于底层证券定义的完整性约束
基表。这意味着您可以对视图实施约束
通过对基表的约束。
关于视图约束的注释视图约束是表的一个子集
并受到以下限制:
您只能指定唯一、主键和外键约束
关于意见。但是,您可以使用 WITH CHECK OPTION 定义视图
子句,相当于为
查看。
仅在 DISABLE NOVALIDATE 模式下支持视图约束。你
不能指定任何其他模式。您必须指定关键字 DISABLE
当您声明视图约束时。您无需指定 NOVALIDATE
明确,因为它是默认值。
RELY 和 NORELY 参数是可选的。查看约束,因为
它们是非强制的,通常用 RELY 参数指定
让它们更有用。 RELY 或 NORELY 关键字必须在
禁用关键字。详情请参阅“RELY 条款”。
因为视图约束不是直接强制的,所以你不能指定
初始延期或可延期。
您不能指定 using_index_clause、exceptions_clause
子句,或references_clause 的ON DELETE 子句。
您不能在对象列的属性上定义视图约束。