Som beskrevet under Udpluk er et udpluk en anden måde at få vist data i én eller flere tabeller. Ved hjælp af udpluk kan du begrænse de oplysninger, som forskellige brugere har adgang til. Nedenfor vises relationen mellem udpluk og tabeller.
I Fig. 2 begrænses adgangen i Udpluk_A til kolonnerne AC1 og AC2 i TABEL_A.
I Udpluk_AB får brugeren adgang til kolonne AC3 i TABEL_A og BC2 i TABEL_B.
Vha. Udpluk_A begrænses brugeradgangen til TABEL_A, og vha. Udpluk_AB begrænses brugeradgangen til visse kolonner i begge tabeller.
Fig. 2. Relation mellem tabeller og udpluk
![]() |
I nedenstående eksempel oprettes et udpluk med ikke-ledere i afdeling 20 i tabellen STAFF. Lønnen og provisionen, som vises i basistabellen, vises ikke i udplukket.
CREATE VIEW STAFF_ONLY AS SELECT ID, NAME, DEPT, JOB, YEARS FROM STAFF WHERE JOB <> 'Mgr' AND DEPT=20
Når du har oprettet udplukket, kan du få det vist vha. følgende sætning:
SELECT * FROM STAFF_ONLY
Resultatet er:
ID NAME DEPT JOB YEARS ------ --------- ------ ----- ------ 20 Pernal 20 Sales 8 80 James 20 Clerk - 190 Sneider 20 Clerk 8
I endnu et eksempel kan vi bruge tabellerne STAFF og ORG til at oprette et udpluk, der viser navnet på hver afdeling og navnet på afdelingslederen. Udplukket oprettes vha. følgende sætning:
CREATE VIEW DEPARTMENT_MGRS AS SELECT NAME, DEPTNAME FROM STAFF, ORG WHERE MANAGER = ID
Du kan angive yderligere betingelser for tilføjelser til og opdatering af tabeller ved at bruge udtrykket WITH CHECK OPTION, når du opretter et udpluk. Databasesystemet undersøger så, om opdateringer af eller tilføjelser til udplukket er i overensstemmelse med udpluksdefinitionen. Hvis ikke, afvises de. Hvis du udelader udtrykket, kontrolleres tilføjelser og opdateringer ikke i forhold til udpluksdefinitionen. Der er flere oplysninger om WITH CHECK OPTION i SQL Reference.
Ligesom SELECT-sætningen afsendes INSERT-, DELETE- og UPDATE-sætningerne mod et udpluk, som om det var en rigtig tabel. Sætningerne bruges til at ændre data i den eller de underliggende basistabel(ler). Når du igen bruger udplukket, hentes data fra de seneste basistabeller. Hvis du ikke bruger WITH CHECK OPTION-udtrykket, er det ikke sikkert, at de data, du ændrer fra udplukket, vises, næste gang du får adgang til udplukket. Yderligere kan du risikere, at dataene ikke passer til den oprindelige udpluksdefinition.
Her opdateres udplukket FIXED_INCOME:
CREATE VIEW FIXED_INCOME (LNAME, DEPART, JOBTITLE, NEWSALARY) AS SELECT NAME, DEPT, JOB, SALARY FROM PERS WHERE JOB <> 'Sales' WITH CHECK OPTION
UPDATE FIXED_INCOME SET NEWSALARY = SALARY * 1.10 WHERE LNAME = 'Li'
Bortset fra CHECK-funktionen svarer ovenstående opdatering af udplukket til at opdatere basistabellen PERS:
UPDATE PERS SET SALARY = SALARY * 1.10 WHERE NAME = 'Li' AND JOB <> 'Sales'
Fordi udplukket er oprettet med angivelse af WITH CHECK OPTION for betingelsen JOB <> 'Sales' i CREATE VIEW FIXED_INCOME, er følgende opdatering ikke mulig, når Limoges flyttes til salgsafdelingen:
UPDATE FIXED_INCOME SET JOBTITLE = 'Sales' WHERE LNAME = 'Limoges'
Kolonner, der er defineret vha. udtryk som SALARY + COMM eller SALARY * 1.25 kan ikke opdateres. Hvis du definerer et udpluk med den slags kolonner, får ejeren ikke UPDATE-rettighed til kolonnerne. INSERT-sætninger kan ikke bruges mod udpluk med den slags kolonner, men DELETE-sætninger kan.
Forestil dig, at der i tabellen PERS ikke er nogen kolonner, der ikke kan indeholde NULL. Du kan indsætte rækker i tabellen PERS fra udplukket FIXED_INCOME, selv om det ikke indeholder ID, YEARS, COMM eller BIRTH_DATE fra den underliggende tabel PERS. For kolonner, som ikke vises i udplukket, sættes værdien til NULL eller standardværdien.
Kolonnen ID i tabellen PERS kan imidlertid ikke indeholde NULL. Hvis du prøver at indsætte en række via udplukket FIXED_INCOME, prøver systemet at indsætte NULL-værdier i alle de PERS-kolonner, som er "usynlige" i udplukket. Fordi kolonnen ID ikke vises i udplukket og ikke kan indeholde NULL-værdier, tillader systemet ikke indsættelse af rækker via udplukket.
Du kan læse om regler og begrænsninger for ændring af udpluk under CREATE VIEW i SQL Reference.