Visninger i Oracle kan kunne opdateres under særlige forhold. Det kan være vanskeligt, og normalt er ikke tilrådeligt.
Fra Oracle 10g SQL Reference:
Bemærkninger om opdaterbare visninger
En opdaterbar visning er en, du kan bruge til at indsætte, opdatere eller slette basistabelrækker. Du kan oprette en visning, der i sagens natur kan opdateres, eller du kan oprette en I STEDET FOR trigger på enhver visning for at gøre den opdaterbar.
For at finde ud af, om og på hvilke måder kolonnerne i en iboende opdateringsbar visning kan ændres, skal du forespørge i USER_UPDATABLE_COLUMNS dataordbogsvisningen. De oplysninger, der vises af denne visning, er kun meningsfulde for visninger, der iboende kan opdateres. For at en visning i sagens natur kan opdateres, skal følgende betingelser være opfyldt:
- Hver kolonne i visningen skal knyttes til en kolonne i en enkelt tabel. Hvis en visningskolonne f.eks. er knyttet til outputtet af et TABLE-udtryk (en ikke-indlejret samling), er visningen ikke i sig selv opdaterbar.
- Udvalget må ikke indeholde nogen af følgende konstruktioner:
- En sæt-operator
- en DISTINCT operator
- En aggregeret eller analytisk funktion
- EN GROUP BY, ORDER BY, MODEL, CONNECT BY eller START WITH-klausul
- Et samlingsudtryk i en SELECT-liste
- En underforespørgsel i en SELECT-liste
- En underforespørgsel, der er angivet MED SKRIVEKUN
- Tilslutter sig, med nogle undtagelser, som dokumenteret i Oracle Database Administrator's Guide
Desuden, hvis en iboende opdateringsbar visning indeholder pseudokolonner eller udtryk, kan du ikke opdatere basistabelrækker med en UPDATE-sætning, der refererer til nogen af disse pseudokolonner eller udtryk.
Hvis du ønsker, at en join-visning skal kunne opdateres, skal alle følgende betingelser være opfyldt:
- DML-sætningen må kun påvirke én tabel, der ligger til grund for joinforbindelsen.
- For en INSERT-sætning må visningen ikke oprettes MED CHECK OPTION, og alle kolonner, som værdier indsættes i, skal komme fra en nøglebevaret tabel. En nøglebevaret tabel er en, for hvilken hver primær nøgle eller unik nøgleværdi i basistabellen også er unik i forbindelsesvisningen.
- For en UPDATE-sætning skal alle opdaterede kolonner udtrækkes fra en nøglebevaret tabel. Hvis visningen blev oprettet MED KONTROLMULIGHED, skal kolonner og kolonner, der er taget fra tabeller, der refereres til mere end én gang i visningen, være beskyttet mod OPDATERING.
- For en DELETE-sætning, hvis joinforbindelsen resulterer i mere end én nøglebevaret tabel, sletter Oracle Database fra den første tabel, der er navngivet i FROM-sætningen, uanset om visningen blev oprettet MED CHECK OPTION eller ej.