最简单的答案就是你的语法不正确。您必须指定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>
视图约束
Oracle不强制视图约束。但是,视图 上的操作受底层 基表中定义的完整性约束的约束。这意味着您可以通过对基表的约束对视图 强制执行约束。
上查看约束笔记查看约束的表 约束的一个子集,并受到以下限制:
只能指定唯一,主键和外键约束 的看法。但是,您可以使用WITH CHECK OPTION 子句定义视图,该操作等同于为 视图指定检查约束。
只有在DISABLE NOVALIDATE模式下才支持视图约束。您 不能指定任何其他模式。声明视图约束时,必须指定关键字DISABLE 。您无需明确指定NOVALIDATE ,因为它是默认值。
RELY和NORELY参数是可选的。查看约束,因为 它们未被强制执行,通常用RELY参数指定为 使它们更有用。 RELY或NORELY关键字必须在 DISABLE关键字之前。有关更多信息,请参阅“RELY条款”。
因为视图约束不是直接执行的,所以不能指定 INITIALLY DEFERRED或DEFERRABLE。
您无法指定references_clause的using_index_clause,exceptions_clause 子句或ON DELETE子句。
您无法定义对象列的属性的视图约束。