Kom godt i gang med SQL

Opret udpluk

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


REQTEXT

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.

Revidér data vha. udpluk

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.


[ Øverst på siden | Forrige side | Næste side | Indholdsfortegnelse | Stikordsregister ]