2

SQLサーバーでは、データビューを更新できます。ビューの概念は読み取り専用テーブルだと思います。SQLでビューを編集できるのはなぜですか.Oracleでは可能ですか?

4

5 に答える 5

5

なぜ編集可能なビューを作成できるのかという質問に答えると、更新 (または表示) したくないフィールドへのアクセスを制限できるようにするためです。次に、ビューへのアクセス権をユーザーに付与できますが、基になるテーブルへのアクセス権は付与できません

簡単な例として、人事テーブルを作成できます。一部のユーザーが緊急連絡先の詳細などのフィールドを更新できるようにするビューを作成できますが、銀行の詳細や給与を表示または更新することはできません

ビューを更新可能にするために満たすべき基準はたくさんありますが、拡張機能のために INSTEAD OF トリガーを実際に使用できますhttp://msdn.microsoft.com/en-us/library/ms187956.aspx

于 2013-07-18T10:56:51.193 に答える
3

ビューの概念は読み取り専用テーブルだと思います

いいえ、それは仮想テーブルのようなものです。実際のテーブルがあれば、それをビューに置き換えることができなければなりません。ユーザーはそれほど賢くはありません。

コッドによると:

ルール 6: ビュー更新ルール: 理論的に更新可能なすべてのビューは、システムによって更新可能でなければなりません。

しかし、実際には、この理想は実現できませんでした。

于 2013-07-18T10:59:53.767 に答える
0

はい、Oracleでは可能です。他の回答では、ビューが更新可能である理由がすでに説明されており、その質問に光を当てていました。それらはOracleでも許可されていますが、いくつかの制限/制限がありますここにOracleのドキュメントがあります

同様に、ビュー select には次のものを含めることができません: 集約関数、distinct 句、group by... 詳細についてはリンクを参照してください

于 2013-07-18T15:38:37.377 に答える
-2

ビューはread only tablesそのため、ビューdoesn't support DML statementsで更新を実行することはできません。

興味深い点は、その for をupdate statemnt over view記述して記述できるため、ビュー内のテーブルでinstead of trigger実行できることです。multiple update statements

Pinal Dev Viewsによると、次の制限があります

  • ORDER BY は機能しません。
  • ビュー外のテーブルを結合して列を追加するとコストがかかる
  • 頻繁に使用されないビューに作成されたインデックス
  • SELECT * およびビューでの列の問題の追加
  • COUNT(*) は許可されませんが、COUNT_BIG(*) は許可されます
  • UNION は許可されていませんが、インデックス ビューでは許可されています
  • クロス データベース クエリはインデックス付きビューでは許可されていません
  • インデックス付きビューで許可されていない外部結合
  • インデックス付きビューでは SELF JOIN は許可されていません
  • インデックス付きビューのビュー定義にキーワードを含めることはできません
  • インデックス ビューでは不可能なビュー全体のビュー
于 2013-07-18T10:48:02.753 に答える