2017-04-19 55 views
0

ビューの列にnull値を許可しない制約を追加しようとしています。ここに私のクエリは次のとおりです。ORA-00922:ビューの変更時に欠落したオプションまたは無効なオプションがあります。 - Oracle

alter view myTable add constraint pk_generate2 check(pk is not null); 

私はこの1つを試してみました:

alter view myTable add constraint pk_generate2 check(pk is not null) disable; 

これはどちらか動作しませんでした。

タイトルに誤りがあります。クエリが動作するように変更するにはどうすればよいですか?ありがとう。

PS:このような制約をビューに追加する方法がないため、解決策がないと思われます。しかし、ROWNUMをビューの主キーとして追加して、Entity Frameworkがそれを受け入れられるようにします。

+0

私はビューに主キーの1つを含めて問題を解決しました。 – jason

答えて

1

ビューの制約

Oracle Databaseは、ビューの制約を強制しません。ただし、基本表の制約を使用してビューに制約を適用できます。

ビューでは一意キー、主キー、および外部キー制約のみを指定でき、DISABLE NOVALIDATEモードでのみサポートされます。オブジェクト列の属性に対してビュー制約を定義することはできません。

詳細については、この記事を読む:constraint in Oracle

0

あなたはダミーの主キー列としてrownumを追加している場合、あなたは主キー制約を追加する必要がありますだけでなく、ヌルチェック制約 - 許可されていませんとにかくビューで。

noted in the documentationとすると、特定の制約タイプのみが許容され、disablenovalidateで定義する必要があります。ビューの制約上

ノート
ビュー制約はテーブル制約のサブセットであり、以下の制限があります。

  • あなただけのユニークな、主キーを指定して、上の外部キー制約することができます再生回数ただし、ビューにCHECK制約を指定するのと同等のWITH CHECK OPTION節を使用して、ビューを定義することができます。
  • ビュー制約は、DISABLE NOVALIDATEモードでのみサポートされています。他のモードは指定できません。ビュー制約を宣言するときは、キーワードDISABLEを指定する必要があります。 NOVALIDATEはデフォルトであるため、明示的に指定する必要はありません。
    ...

だから、あなたが行うことができます:

-- example view with rownum dummy PK column 
create view v42 as 
select rownum as pk, table_name 
from user_tables d; 

View V42 created. 

alter view v42 add constraint pk_generate2 primary key (pk) disable novalidate; 

View V42 altered. 

ドキュメントも

Oracleはビューの制約を強制していないことを指摘しています。ただし、ビューの操作は、基礎となる基本表に定義された整合性制約の影響を受けます。つまり、基本表の制約を介してビューに制約を適用できます。

が、問題になるだろうされていないrownum(またはrow_number())に基づいた値を持ちます。

+0

私はすでにあなたが言ったことをしました。しかし、EFはそのような設定を受け入れません。 – jason

関連する問題