sql >> Databasteknik >  >> RDS >> Oracle

I Oracle, är det möjligt att INFOGA eller UPPDATERA en post genom en vy?

Visningar i Oracle kan kunna uppdateras under särskilda förhållanden. Det kan vara knepigt, och vanligtvis är inte tillrådligt.

Från Oracle 10g SQL Reference:

Anmärkningar om uppdateringsbara vyer

En uppdateringsbar vy är en som du kan använda för att infoga, uppdatera eller ta bort bastabellrader. Du kan skapa en vy som i sig är uppdateringsbar, eller så kan du skapa en ISTÄLLET FÖR trigger på vilken vy som helst för att göra den uppdateringsbar.

För att ta reda på om och på vilka sätt kolumnerna i en inneboende uppdateringsbar vy kan ändras, fråga i USER_UPDATABLE_COLUMNS datalexikon. Informationen som visas i den här vyn är endast meningsfull för vyer som kan uppdateras. För att en vy ska kunna uppdateras måste följande villkor vara uppfyllda:

  • Varje kolumn i vyn måste mappas till en kolumn i en enskild tabell. Till exempel, om en vykolumn mappas till utdata från en TABLE-sats (en okapslad samling), är vyn inte i sig uppdateringsbar.
  • Vyn får inte innehålla någon av följande konstruktioner:
    • En uppsättningsoperator
    • en DISTINCT-operator
    • En aggregerad eller analytisk funktion
    • EN GROUP BY, ORDER BY, MODEL, CONNECT BY eller START WITH-sats
    • Ett samlingsuttryck i en SELECT-lista
    • En underfråga i en SELECT-lista
    • En underfråga betecknad MED ENDAST läs
    • Gå med, med vissa undantag, enligt dokumentationen i Oracle Database Administrator's Guide

Dessutom, om en inneboende uppdateringsbar vy innehåller pseudokolumner eller uttryck, kan du inte uppdatera bastabellrader med en UPDATE-sats som refererar till någon av dessa pseudokolumner eller uttryck.

Om du vill att en sammanfogningsvy ska vara uppdateringsbar måste alla följande villkor vara uppfyllda:

  • DML-satsen får endast påverka en tabell som ligger bakom kopplingen.
  • För en INSERT-sats får vyn inte skapas MED CHECK OPTION, och alla kolumner som värden infogas i måste komma från en nyckelbevarad tabell. En nyckelbevarad tabell är en tabell för vilken varje primärnyckel eller unikt nyckelvärde i bastabellen också är unikt i sammanfogningsvyn.
  • För en UPDATE-sats måste alla uppdaterade kolumner extraheras från en nyckelbevarad tabell. Om vyn skapades MED KONTROLLOPTION, måste kolumner och kolumner från tabeller som refereras mer än en gång i vyn skyddas från UPPDATERING.
  • För en DELETE-sats, om kopplingen resulterar i mer än en nyckelbevarad tabell, tar Oracle Database bort från den första tabellen som heter i FROM-satsen, oavsett om vyn skapades MED CHECKALTERNATIV eller inte.


  1. Motsvarighet till Oracles RowID i MySQL

  2. Hur deklarerar man variabel och använder den i samma Oracle SQL-skript?

  3. MySQL ENUM-typ kontra sammanfogningstabeller

  4. Misslyckades med att bygga hjul för psycopg2 - MacOSX med virtualenv och pip