2 答え

簡単な答えはあなたの構文が間違っているということです。 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句を使用します。

     

オブジェクトの列の属性に対してビューの制約を定義することはできません。

9
追加された

制約を無効として作成する必要があります。これは、実際には、クエリプランに影響を与えるヒントをオプティマイザに与える方法です。

データの整合性は、基礎となるテーブルレベルで適用されます。あなたがそれについて考えるとき、ビュー・レベルで主キー制約を強制しても、それほど意味がありません。プレーンなビューはデータを格納しませんが、それは他のテーブルによって提供されるデータの単なる "ビュー"です。プライマリ・キー制約が基礎となるテーブルのビューにのみ置かれ、そのテーブルが制約自体を強制しない場合、ビューが制約を破るデータでテーブルを直接更新した状況をどのように処理しますか? (すなわち、テーブルは、ビューを介してどの制約が配置されているのか分からない)

3
追加された
それは私のためのドキュメンテーションの問題です。
追加された 著者 Andrey Balaguta,