Dnes: 26. září 2016    | Registrace | Hledáme | Redakce | Info | Testy | Školení | Ocenění | Nápověda | Čtenář: nepřihlášen

Rychlé odkazy
  • Hlavní stránka
  • Seznam rubrik
  • Ankety
  • Editoriály
  • TOP 15
  • KONFERENCE 2008
  • KONFERENCE 2007
  • KONFERENCE 2006
  • KONFERENCE 2005
  • KONFERENCE 2004
  • Sborník
  • Testy
  • Virtuální školení
  • Personalizace


  • Hledáte práci?
    Hledáme redaktora - pojďte s námi tvořit Databázový svět!

    Vyhledávání

    Hledej
    na Databázovém světě!



    Rozšířené vyhledávání

    Rubriky
    Aktuality
    Bezpečnost
    Business
    Česká scéna
    Datové sklady
    Dokumentace
    Dotazovací jazyky
    Hardware
    Historie
    Komentáře
    Literatura
    Metodologie
    Nondb
    Open Source
    Poradna
    Produkty
    Případové studie
    Redakce
    Rozhovory
    Standardy
    Technologie
    Tipy - triky
    Tiskové zprávy
    Vývoj
    Vývojové nástroje
    Zajímavosti

    Co je to?
    Databázový stroj
    (Database Engine)

    Pod pojmem Database Engine (tedy pod databázovým strojem) se obvykle rozumí jádro databázového serveru a základní obslužné programy tohoto jádra (například zajišťující vzdálené připojení uživatelů). Lze tedy říci, že databázový stroj je podmnožinou databázového serveru, přičemž pod pojmem databázový server je nutné vidět vybavení (typicky softwarové) pracující nad danou databází a zajišťující veškeré činnosti (včetně všech potřebných komunikací), které nad danou databází mají být zajišťovány.

    Akce
    Dynamická Datová Centra
    - na semináři se seznámíte s komplexním řešením a koncepcí Dynamických Datových Center od Fujitsu Siemens Computers se speciálním důrazem na řešení FlexFrame.

    Textová inzerce
    IBPhoenix - Vše o InterBase a Firebirdu.

    Smějete se rádi? - Pak je pro vás Vtipník to pravé!

    Prodejce reklamy - Hledáme schopného prodejce reklamního prostoru, možnost i externí spolupráce.

    Přihlášený čtenář
    Nepřihlášený čtenář

    O portálu
    Databázový svět
    ISSN: 1213-5933

    Web je optimalizován pro rozlišení 1024x768, nicméně kromě větších rozlišení podporujeme i 800x600. Podrobnosti najdete zde.

    Chcete-li mít kdykoliv možnost zkontrolovat obsah našeho portálu, můžete využít podporu rss. Podrobnosti najdete zde.
    Tipy a triky pro Oracle II. – jak na hierarchické struktury?


    [Tipy - triky] - Ve druhém pokračování nového seriálu věnovaného praktickým tipům a trikům pro databázovou platformu Oracle Database se podíváme na to, jak v Oracle využívat hierarchické struktury. Cílem seriálu je přinášet vám nejen praktické informace, které vám mohou pomoci při správě či vývoji na této platformě, ale také upozorňovat na zajímavé funkce. O kterých možná ani nevíte, že existují.



    Potřebovali jste někdy vypsat všechny přímé i nepřímé podřízené určitého zaměstnance? Zjišťovali jste práva uživatele v systému hierarchických rolí? Museli jste někdy určit kterých všech koncových výrobků se dle hierarchického kusovníku dotkne změna v konstrukci určité komponenty?

    Organizační struktura firmy, role a práva uživatelů, složky v systému správy dokumentů, nebo třeba kusovník, to jsou příklady hierarchických struktur běžně se objevujících v podnikových aplikacích a tudíž i běžně ukládaných do databáze. Samotné uložení dat do databáze obvykle není problém. Jak ale nad podobnou strukturou provádět dotazy? Jakmile potřebujete najednou získat více než jednu úroveň hierarchie, základní SQL nestačí a pokusy implementovat tuto funkcionalitu procedurálně nebývají příliš výkonné – navíc proč ztrácet čas znovuobjevováním Ameriky.

    V databázové platformě Oracle jsou řešením hierarchické dotazy. Že jste o nich dosud neslyšeli? Není divu, tato funkcionalita byla implementována již v Oracle verze 2 (tedy skoro před 30 lety) a tak se málokdy probojuje do současných marketingových prezentací či článků. Přesto jde o velmi užitečnou funkcionalitu.

    Pro příklady v tomto dílu použijeme tabulku SCOTT.EMP – standardní demo data databáze Oracle. Velmi podobnou strukturu má také tabulka HR.EMPLOYEES – pouze musíte použít jiná jména sloupců (employee_id, last_name,job_id,manager_id).

    Základní syntaxe je jednoduchá – hierarchický dotaz se od běžného SELECTu liší jen v několika detailech:

    SELECT ename, 
           empno,mgr,level 
      FROM scott.emp
      CONNECT BY mgr = PRIOR empno
        START WITH mgr is null;

    Sloupce, přes které je hierarchie provázána určuje klauzule CONNECT BY. Klauzule PRIOR říká, že se pole MGR má porovnávat s polem EMPNO nadřízeného (tedy "předchozího") záznamu v hierarchii.

    Klauzule START WITH definuje podmínku určující záznamy v první úrovni hierarchie. V tomto případě je nejvyšší manažer definován tak, že nemá vyplněné pole MGR.

    Pseudosloupec LEVEL určuje úroveň daného záznamu v hierarchii. Můžete jej mimo jiné jednoduše použít pro formátování výstupu:

    SELECT lpad(' ',level*3)||ename name,
           empno, mgr,level 
      FROM scott.emp
      CONNECT BY mgr = PRIOR empno
        START WITH mgr is null
        ORDER SIBLINGS BY ENAME;
    

    Výstupem bude:

    NAME                      EMPNO        MGR      LEVEL
    -------------------- ---------- ---------- ----------
       KING                    7839                     1
          BLAKE                7698       7839          2
             ALLEN             7499       7698          3
             JAMES             7900       7698          3
             MARTIN            7654       7698          3
             TURNER            7844       7698          3
             WARD              7521       7698          3
          CLARK                7782       7839          2
             MILLER            7934       7782          3
          JONES                7566       7839          2
             FORD              7902       7566          3
                SMITH          7369       7902          4
             SCOTT             7788       7566          3
                ADAMS          7876       7788          4
    

    Předchozí příklad ukazuje také způsob, jakým lze ovlivnit řazení záznamů na jednotlivých úrovních – jde o klauzuli ORDER SIBLINGS BY. Běžnou klauzuli ORDER BY provádí Oracle až úplně nakonec – tedy přes všechny záznamy, čímž by způsobila, že by již záznamy vizuálně netvořily hierarchii.

    Tím ale čarování s hierarchickými dotazy v Oracle nekončí. Pro jednotlivé záznamy můžete také získat cestu od nejvyššího záznamu (jak to znáte třeba ze souborového systému) nebo řadu dalších informací:

    SELECT ENAME,
           SYS_CONNECT_BY_PATH(ENAME, '/') path,
           CONNECT_BY_ROOT ENAME topmgr,
           CONNECT_BY_ISLEAF isleaf,
           LEVEL
      FROM scott.emp
        CONNECT BY PRIOR empno = mgr
        START WITH mgr is null
        ORDER SIBLINGS BY ename;
    

    Výstupem bude:

    ENAME      PATH                           TOPMGR      ISLEAF  LEVEL
    ---------- ------------------------------ ---------- ------- ------
    KING       /KING                          KING             0      1
    BLAKE      /KING/BLAKE                    KING             0      2
    ALLEN      /KING/BLAKE/ALLEN              KING             1      3
    JAMES      /KING/BLAKE/JAMES              KING             1      3
    MARTIN     /KING/BLAKE/MARTIN             KING             1      3
    TURNER     /KING/BLAKE/TURNER             KING             1      3
    WARD       /KING/BLAKE/WARD               KING             1      3
    CLARK      /KING/CLARK                    KING             0      2
    MILLER     /KING/CLARK/MILLER             KING             1      3
    JONES      /KING/JONES                    KING             0      2
    FORD       /KING/JONES/FORD               KING             0      3
    SMITH      /KING/JONES/FORD/SMITH         KING             1      4
    SCOTT      /KING/JONES/SCOTT              KING             0      3
    ADAMS      /KING/JONES/SCOTT/ADAMS        KING             1      4
    FORD       /KING/JONES/FORD               KING             0      3
    SMITH      /KING/JONES/FORD/SMITH         KING             1      4
    SCOTT      /KING/JONES/SCOTT              KING             0      3
    ADAMS      /KING/JONES/SCOTT/ADAMS        KING             1      4
    

    Funkce SYS_CONNECT_BY_PATH vrací cestu v hierarchii k aktuálnímu záznamu. Klauzule CONNECT_BY_ROOT funguje podobně jako PRIOR, místo hodnoty přímo nadřízeného záznamu však vrací hodnotu z příslušného záznamu nejvyšší úrovně (tj. nejvyššího manažera).

    Pokud byste chtěli výstup z dotazu použít pro zobrazení ve formě rozbalovací hierarchie tak, jak to třeba dělá u souborů Windows Explorer, bude se vám hodit i pseudosloupec CONNECT_BY_ISLEAF, který určuje, zda je aktuální záznam na poslední úrovni hierarchie (CONNECT_BY_ISLEAF=1) nebo zda má podřízené záznamy (CONNECT_BY_ISLEAF=0).

    Více o hierarchických dotazech si můžete přečíst v manuálu SQL Reference.

    Dnešní ukázky můžete vyzkoušet na libovolné edici Oracle Database, včetně volně dostupné Express Edition. V případě potřeby si Oracle Database můžete stáhnout na webu společnosti Oracle.

    O autorovi
    David Krch (*1976) pracuje ve společnosti Oracle Czech na pozici Technology Sales Consultant. Vystudoval obor Informační technologie na Vysoké škole ekonomické. Od roku 2001 působí ve firmě Oracle Czech na pozici Technology Sales Consultant, ve které je zodpovědný za podporu prodeje technologií Oracle. Z počátku se zaměřoval na portálová řešení. Od roku 2002 se specializuje na podporu prodeje databáze Oracle a témata související se zajištěním provozu, jako je bezpečnost a vysoká dostupnost. Jako nezávislý vývojář vyvíjel na zakázku databázové aplikace s využitím desktopových databází.

    Související články:
    Tipy a triky pro Oracle XVI. – rychlejší aplikace i bez změn dotazů podruhé (03.02.2009)
    Tipy a triky pro Oracle XV. – rychlejší aplikace i bez změn dotazů poprvé (21.11.2008)
    Tipy a triky pro Oracle XIV. – datová komprese (21.10.2008)
    Tipy a triky pro Oracle XIII. – externí data rychle (17.09.2008)
    Tipy a triky pro Oracle XII. – Jak na řízení přístupu na úrovni záznamů? (15.04.2008)
    Tipy a triky pro Oracle XI. – Error Logging Tables (12.11.2007)
    Tipy a triky pro Oracle X. – bojujete s češtinou v Oracle podruhé? (14.05.2007)
    Tipy a triky pro Oracle IX. – bojujete s češtinou v Oracle? (06.02.2007)
    Tipy a triky pro Oracle VIII. – jak na přenosy velkých dat podruhé (03.01.2007)
    Tipy a triky pro Oracle VII. – jak na přenosy velkých dat poprvé (21.11.2006)
    Tipy a triky pro Oracle VI. – trochu jiné triggery (25.09.2006)
    Tipy a triky pro Oracle V. – změna dat v pohledu? (06.09.2006)
    Tipy a triky pro Oracle IV. – analytické funkce podruhé (14.08.2006)
    Tipy a triky pro Oracle III. – analytické funkce poprvé (19.07.2006)
    Tipy a triky pro Oracle I. – jak na automatické přidělování ID? (05.05.2006)

    ( Celý článek! | Autor: David Krch | Počet komentářů: 10 | Přidat komentář | Informační e-mailVytisknout článek )

    Vyhledávání
     

    Anketa
    Kolik ročně utratíte za dovolené?

    Nic 
     (794 hl.)
    Do 1 000,- Kč 
     (622 hl.)
    Do 10 000,- Kč 
     (598 hl.)
    Do 25 000,- Kč 
     (699 hl.)
    Do 50 000,- Kč 
     (616 hl.)
    Do 75 000,- Kč 
     (642 hl.)
    Více než 75 000,- Kč 
     (601 hl.)

    Celkem hlasovalo: 4572


    Poslední komentáře
    frontierd@126.com
    frontierd@126.com
    frontierd@126.com
    c
    http://www.coachoutl

    Newsletter
    Přihlaste si nezávazně - i bez registrace - odběr informačního newsletteru. Podrobné informace najdete zde.

    Emailová adresa:


    Kalendář
    <<  Září  >>
    PoÚtStČtSoNe
       1234
    567891011
    12131415161718
    19202122232425
    2627282930  

    Redakci připojuje


    Nejčtenější

    Databáze je prázdná!


    Nejvíce komentářů

    Databáze je prázdná!


    Reklama






    Nenechte si ujít články na dalších webech




    Na této stránce použité názvy programových produktů, firem apod. mohou být ochrannými známkami
    nebo registrovanými ochrannými známkami příslušných vlastníků.

    Databázový svět | dfKlub - digitální fotografie | Vtipník - vtipy přímo k Vám | Reminder - přestaňte zapomínat | Databázový svět

    Copyright (c) 2004 AVRE Publishing, spol. s r.o. Všechna práva vyhrazena