SQLサーバーでは、データビューを更新できます。ビューの概念は読み取り専用テーブルだと思います。SQLでビューを編集できるのはなぜですか.Oracleでは可能ですか?
5 に答える
なぜ編集可能なビューを作成できるのかという質問に答えると、更新 (または表示) したくないフィールドへのアクセスを制限できるようにするためです。次に、ビューへのアクセス権をユーザーに付与できますが、基になるテーブルへのアクセス権は付与できません
簡単な例として、人事テーブルを作成できます。一部のユーザーが緊急連絡先の詳細などのフィールドを更新できるようにするビューを作成できますが、銀行の詳細や給与を表示または更新することはできません
ビューを更新可能にするために満たすべき基準はたくさんありますが、拡張機能のために INSTEAD OF トリガーを実際に使用できますhttp://msdn.microsoft.com/en-us/library/ms187956.aspx
ビューの概念は読み取り専用テーブルだと思います
いいえ、それは仮想テーブルのようなものです。実際のテーブルがあれば、それをビューに置き換えることができなければなりません。ユーザーはそれほど賢くはありません。
コッドによると:
ルール 6: ビュー更新ルール: 理論的に更新可能なすべてのビューは、システムによって更新可能でなければなりません。
しかし、実際には、この理想は実現できませんでした。
はい、Oracleでは可能です。他の回答では、ビューが更新可能である理由がすでに説明されており、その質問に光を当てていました。それらはOracleでも許可されていますが、いくつかの制限/制限がありますここにOracleのドキュメントがあります
同様に、ビュー select には次のものを含めることができません: 集約関数、distinct 句、group by... 詳細についてはリンクを参照してください
ビューは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 は許可されていません
- インデックス付きビューのビュー定義にキーワードを含めることはできません
- インデックス ビューでは不可能なビュー全体のビュー