簡単な答えはあなたの構文が間違っているということです。 DISABLE
を指定する必要があります 。
NOVALIDATE
disables validation of the primary key, in a view this is the default and so is included automatically; but it's a lot clearer if you use it, as, in a lovely double negative, disable novalidate
disables the ability to disable the primary key.
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句」を参照してください。
ビューの制約は直接適用されないため、指定することはできません
初期的にはデフォルメされているか、または実行不可能です。
using_index_clause、exceptions_clauseを指定することはできません
句、またはreferences_clauseのON DELETE句を使用します。
オブジェクトの列の属性に対してビューの制約を定義することはできません。