Weergaven in Oracle kunnen onder bepaalde voorwaarden kunnen worden bijgewerkt. Het kan lastig zijn, en meestal is niet aan te raden.
Uit de Oracle 10g SQL Reference:
Opmerkingen over bij te werken weergaven
Een bijwerkbare weergave is een weergave die u kunt gebruiken om basistabelrijen in te voegen, bij te werken of te verwijderen. U kunt een weergave maken die inherent kan worden bijgewerkt, of u kunt een INSTEAD OF-trigger maken voor elke weergave om deze te updaten.
Als u wilt weten of en op welke manieren de kolommen van een inherent bijwerkbare weergave kunnen worden gewijzigd, voert u een query uit op de gegevenswoordenboekweergave USER_UPDATABLE_COLUMNS. De informatie die door deze weergave wordt weergegeven, is alleen zinvol voor inherent bij te werken weergaven. Om een weergave inherent te kunnen bijwerken, moet aan de volgende voorwaarden worden voldaan:
- Elke kolom in de weergave moet worden toegewezen aan een kolom van een enkele tabel. Als een weergavekolom bijvoorbeeld wordt toegewezen aan de uitvoer van een TABLE-component (een niet-geneste verzameling), kan de weergave niet inherent worden bijgewerkt.
- De weergave mag geen van de volgende constructies bevatten:
- Een vaste operator
- een DISTINCT-operator
- Een geaggregeerde of analytische functie
- Een clausule GROUP BY, ORDER BY, MODEL, CONNECT BY of START WITH
- Een verzamelingsuitdrukking in een SELECT-lijst
- Een subquery in een SELECT-lijst
- Een subquery aangeduid MET ALLEEN LEZEN
- Wordt lid, met enkele uitzonderingen, zoals beschreven in de Oracle Database Administrator's Guide
Als een inherent bijwerkbare weergave pseudokolommen of expressies bevat, kunt u bovendien de basistabelrijen niet bijwerken met een UPDATE-instructie die verwijst naar een van deze pseudokolommen of expressies.
Als u wilt dat een deelnameweergave kan worden bijgewerkt, moet aan alle volgende voorwaarden worden voldaan:
- De DML-instructie mag slechts één tabel beïnvloeden die ten grondslag ligt aan de join.
- Voor een INSERT-instructie mag de view niet worden gemaakt WITH CHECK OPTION, en alle kolommen waarin waarden worden ingevoegd, moeten afkomstig zijn uit een met een sleutel bewaarde tabel. Een door een sleutel bewaarde tabel is een tabel waarvoor elke primaire sleutel of unieke sleutelwaarde in de basistabel ook uniek is in de join-weergave.
- Voor een UPDATE-instructie moeten alle bijgewerkte kolommen worden geëxtraheerd uit een door een sleutel bewaarde tabel. Als de weergave is gemaakt MET DE OPTIE CONTROLE, moeten de samenvoegkolommen en kolommen uit tabellen waarnaar meer dan eens in de weergave wordt verwezen, worden afgeschermd van UPDATE.
- Als bij een DELETE-instructie de join resulteert in meer dan één met een sleutel bewaarde tabel, wordt Oracle Database verwijderd uit de eerste tabel die in de FROM-clausule wordt genoemd, ongeacht of de weergave is gemaakt WITH CHECK OPTION.