And*_*uta 3 oracle ddl oracle10g
这个问题在意义上是重复的,我还是要澄清一下.Oracle文档明确指出可以在CREATE VIEW子句中指定主键(11g docs具有相同的概念).然而,当我尝试这样做时:
create or replace view ABC(A, B, C, CONSTRAINT A_PK PRIMARY KEY (A)) ....
Run Code Online (Sandbox Code Playgroud)
我ORA-00922: missing or invalid option指着"主键"一词.问题是,是Oracle还是Oracle文档存在问题?
Ben*_*Ben 10
简单的答案是你的语法不正确.你必须指定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>
Run Code Online (Sandbox Code Playgroud)
从文档:
查看约束
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子句.
您无法在对象列的属性上定义视图约束.
| 归档时间: |
|
| 查看次数: |
23546 次 |
| 最近记录: |