sql >> データベース >  >> RDS >> Oracle

Oracleでは、ビューを介してレコードを挿入または更新することはできますか?

    Oracleのビューは可能性があります 特定の条件下で更新可能である。トリッキーな場合があり、通常 推奨されません。

    Oracle 10g SQLリファレンスから:

    更新可能なビューに関する注意事項

    更新可能なビューは、ベーステーブルの行を挿入、更新、または削除するために使用できるビューです。本質的に更新可能なビューを作成することも、任意のビューにINSTEADOFトリガーを作成して更新可能にすることもできます。

    本質的に更新可能なビューの列を変更できるかどうか、およびどのように変更できるかを知るには、USER_UPDATABLE_COLUMNSデータディクショナリビューにクエリを実行します。このビューによって表示される情報は、本質的に更新可能なビューに対してのみ意味があります。ビューを本質的に更新可能にするには、次の条件を満たす必要があります。

    • ビューの各列は、単一のテーブルの列にマップする必要があります。たとえば、ビュー列がTABLE句の出力(ネストされていないコレクション)にマップされている場合、ビューは本質的に更新可能ではありません。
    • ビューには、次の構成要素を含めることはできません。
      • 集合演算子
      • DISTINCTオペレーター
      • 集計関数または分析関数
      • GROUP BY、ORDER BY、MODEL、CONNECT BY、またはSTARTWITH句
      • SELECTリストのコレクション式
      • SELECTリストのサブクエリ
      • 読み取り専用で指定されたサブクエリ
      • Oracle Database管理者ガイドに記載されているように、いくつかの例外を除いて結合します

    さらに、本質的に更新可能なビューに疑似列または式が含まれている場合、これらの疑似列または式のいずれかを参照するUPDATEステートメントでベーステーブルの行を更新することはできません。

    結合ビューを更新可能にする場合は、次のすべての条件が満たされている必要があります。

    • DMLステートメントは、結合の基礎となる1つのテーブルにのみ影響を与える必要があります。
    • INSERTステートメントの場合、ビューはWITH CHECK OPTIONで作成してはならず、値が挿入されるすべての列はキー保存テーブルからのものである必要があります。キー保存テーブルとは、ベーステーブル内のすべての主キーまたは一意キー値が結合ビューでも一意であるテーブルです。
    • UPDATEステートメントの場合、更新されたすべての列は、キーが保持されたテーブルから抽出する必要があります。ビューがWITHCHECKOPTIONで作成された場合は、結合列と、ビューで複数回参照されるテーブルから取得された列をUPDATEから保護する必要があります。
    • DELETEステートメントの場合、結合によって複数のキー保存テーブルが生成されると、ビューがWITH CHECK OPTIONで作成されたかどうかに関係なく、OracleDatabaseはFROM句で指定された最初のテーブルから削除します。


    1. OGG-01224アドレスはすでに使用されています

    2. SQL Serverクエリで週末の日を除外するにはどうすればよいですか?

    3. MySQLクエリ監視bashスクリプトを作成する

    4. Prismaの一意キーに複数のフィールドを使用する