Poslední úpravy - Vyhledat:

SQL

O modelování

Power Designer

Oracle Data Modeler

Krátká videa DM

Zdroje...

edit SideBar

SQL /

CREATE VIEW

< ALTER TABLE | SQL postupnì | DROP >

Pohled neboli VIEW je virtuální tabulka definovaná jako výsledek vyhodnocení dotazu. S pohledy je v mnoha ohledech mo¾no pracovat jako se skuteènými tabulkami: je mo¾no nad nimi formulovat dotazy, za urèitých okolností je mo¾no manipulovat s "jejich" daty. Syntaxe:

 
      create view <jméno_pohledu> as <poddotaz> [with check option];

Klauzule with check option rozhoduje o tom, zda se bude kontrolovat vstup dat do virtuální tabulky: pokud je tato klauzule souèástí definice pohledu, nelze do nìj vlo¾it data tak, ¾e by vzniklý záznam "vyskoèil" z pohledu. Pøesnìji, ¾e by pak vzniklý záznam nepatøil do výsledku vyhodnocení definièního dotazu pohledu.

Pohledy dìlíme na aktualizovatelné a ne, podle toho, zda je mo¾no s daty manipulovat jejich prostøednictvím.

Hlavní vyu¾ití pohledù je k jemnému øízení pøístupových práv k datùm. Dále je eventuálnì mù¾eme vyu¾ít následnì po zmìnách provedených v návrhu databáze k tomu, aby alespoò nìkteré aplikace nemusely být pøizpùsobovány: pod jmény starých tabulek se mohou nacházet novì definované virtuální tabulky. Pohledy mù¾eme také definovat k tomu, aby vývoj aplikací byl intelektuálnì snaz¹í – definujeme lépe pochopitelné objekty.


Pøíklad: Definujme pohled pro osoby, které mají SKYPE. Tímto pohledem umo¾nìme pøístup jen k ID, jménu, pøíjmení, skype loginu a poznámce. Skype login a» je dostupný pod jménem "LOGIN". Zabraòme vymazání skype loginu skrz tento pohled.

        create view SKYPE_OSOBY as
        select ID, JMEN, PRIJM, SKYPE as LOGIN, POZN from OSOBA
        where SKYPE is not null
        with check option;
Nyní mù¾ete vyzkou¹et dotaz:
        select JMEN, PRIJM, LOGIN
        from SKYPE_OSOBY;

Pøíklad: Vlo¾te novou SKYPE_OSOBU.

        insert into SKYPE_OSOBA (ID,JMEN, PRIJM, LOGIN)
        values (<nové_ID>,'<nové_jméno>','<nové_pøíjmení>','<nový_skype>');
Vyzkou¹ejte dvì varianty, zadejte neprázdný LOGIN, a pak se pokuste vlo¾it novou osobu s LOGINEM NULL. V obou pøípadech se pak pøesvìdète o výsledku pøíkazem SELECT, nad SYKPE_OSOBY i nad tabulkou OSOBY.

Pøíklad: Pokuste se smazat LOGIN nìjaké SKYPE_OSOBY.

         update SKYPE_OSOBY
         set SKYPE=NULL where ID=<nìjaké_ID>;
Pøesvìdète se o výsledku pøíkazem SELECT.

Pohled z pøedchozích pøíkladù byl aktualizovatelný. Pøesné rozli¹ení, které pohledy jsou aktualizovatelné, a které nikoli, mù¾ete nalézt v referenèní pøíruèce jazyka, smysl je ten, aby pøi pokusu vlo¾it data skrz pohled bylo jasné, do kterých tabulek, do kterých øádkù, a do kterých sloupcù se mají data zapsat.

Napøíklad pohled definovaný na základì dotazu vypoèítávajícího souhrny není aktualizovatelný.

Pøíklad: Definujte pohled poskytující pøehled o tom, kolik je osob ve kterém mìstì.

         create view POCTY_VE_MESTECH as
         select MEST, count(*) as POCET_OSOB
         from OSOBA
         group by MEST;
Vlo¾it nový záznam nebo upravit stávající v tomto pohledu nejde. Takový pohled by se mohl vyu¾ít pro nìkoho, kdo nesmí vidìt osobní data osob, ale má mít pøístup ke statistikám.

Pohledy definované na základì dotazù propojujících více tabulek jsou aktualizovatelné jen výjimeènì; pokud taková potøeba nastane, dá se eventuálnì vyu¾ít "instead of" trigger (v systému Oracle).

< ALTER TABLE | SQL postupnì | DROP >

Upravit - Historie - Tisk - Poslední úpravy - Vyhledat
Poslední úprava stránky: 20.10.2009, 17:44