Ansichten in Oracle können unter bestimmten Bedingungen aktualisierbar sein. Es kann schwierig sein, und normalerweise ist nicht ratsam.
Aus der Oracle 10g SQL-Referenz:
Hinweise zu aktualisierbaren Ansichten
Eine aktualisierbare Ansicht ist eine Ansicht, die Sie verwenden können, um Basistabellenzeilen einzufügen, zu aktualisieren oder zu löschen. Sie können eine Ansicht so erstellen, dass sie von Natur aus aktualisierbar ist, oder Sie können einen INSTEAD OF-Trigger für jede Ansicht erstellen, um sie aktualisierbar zu machen.
Um zu erfahren, ob und auf welche Weise die Spalten einer inhärent aktualisierbaren Ansicht geändert werden können, fragen Sie die Datenwörterbuchansicht USER_UPDATABLE_COLUMNS ab. Die von dieser Ansicht angezeigten Informationen sind nur für inhärent aktualisierbare Ansichten von Bedeutung. Damit eine Ansicht grundsätzlich aktualisierbar ist, müssen die folgenden Bedingungen erfüllt sein:
- Jede Spalte in der Ansicht muss einer Spalte einer einzelnen Tabelle zugeordnet werden. Wenn beispielsweise eine Ansichtsspalte der Ausgabe einer TABLE-Klausel (einer nicht verschachtelten Sammlung) zugeordnet ist, ist die Ansicht nicht von Natur aus aktualisierbar.
- Die Ansicht darf keines der folgenden Konstrukte enthalten:
- Ein Mengenoperator
- ein DISTINCT-Operator
- Eine Aggregat- oder Analysefunktion
- Eine GROUP BY-, ORDER BY-, MODEL-, CONNECT BY- oder START WITH-Klausel
- Ein Sammlungsausdruck in einer SELECT-Liste
- Eine Unterabfrage in einer SELECT-Liste
- Eine Unterabfrage mit der Bezeichnung WITH READ ONLY
- Joins, mit einigen Ausnahmen, wie im Oracle Database Administrator's Guide dokumentiert
Wenn eine inhärent aktualisierbare Ansicht außerdem Pseudospalten oder -ausdrücke enthält, können Sie Basistabellenzeilen nicht mit einer UPDATE-Anweisung aktualisieren, die sich auf eine dieser Pseudospalten oder -ausdrücke bezieht.
Wenn Sie möchten, dass eine Join-Ansicht aktualisierbar ist, müssen alle folgenden Bedingungen erfüllt sein:
- Die DML-Anweisung darf nur eine Tabelle betreffen, die dem Join zugrunde liegt.
- Für eine INSERT-Anweisung darf die Ansicht nicht WITH CHECK OPTION erstellt werden, und alle Spalten, in die Werte eingefügt werden, müssen aus einer schlüsselerhaltenen Tabelle stammen. Eine schlüsselerhaltene Tabelle ist eine Tabelle, für die jeder Primärschlüssel oder eindeutige Schlüsselwert in der Basistabelle auch in der Join-Ansicht eindeutig ist.
- Für eine UPDATE-Anweisung müssen alle aktualisierten Spalten aus einer schlüsselerhaltenen Tabelle extrahiert werden. Wenn die Ansicht MIT CHECK OPTION erstellt wurde, müssen Join-Spalten und Spalten aus Tabellen, die mehr als einmal in der Ansicht referenziert werden, vor UPDATE geschützt werden.
- Wenn bei einer DELETE-Anweisung der Join zu mehr als einer schlüsselerhaltenen Tabelle führt, löscht Oracle Database aus der ersten Tabelle, die in der FROM-Klausel genannt wird, unabhängig davon, ob die Ansicht WITH CHECK OPTION erstellt wurde oder nicht.