Dnes: 29. 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?
    Datový sklad
    Tento pojem poprvé formuloval koncem 80. let William Inmon jako strategii přístupu k datům určeným pro rozsáhlé analýzy. V případě datového skladu hovoříme o historických, časově rozlišených, agregovaných, průběžně rozšiřovaných datech uspořádaných pro podporu potřeb managementu.

    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 I. – jak na automatické přidělování ID?


    [Tipy - triky] - V první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 se vytvářejí sloupce s automaticky přidělovanými čísly. 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í.



    Pokud se s databázovou platformou Oracle setkáváte poprvé, asi budete překvapeni tím, jakým způsobem se v ní vytvářejí sloupce s automaticky přidělovanými čísly. Na rozdíl od jiných databází totiž v Oracle nenajdete datový typ IDENTITY, SERIAL, AUTONUMBER ani žádný podobný. Přesto je však řešení velmi jednoduché, když ovšem víte jak na to.

    Oracle má pro tyto účely speciální typ databázového objektu – sekvence. Ty po vytvoření postupně vrací čísla z definované číselné řady. Mechanismus je navržen tak, aby přidělené číslo již nemohla získat jiná transakce, ale aby zároveň bylo minimalizováno vzájemné blokování transakcí i počet I/O operací.

    Sekvenci vytvoříte podobně jako jiné databázové objekty, a to příkazem CREATE. I když je možné specifikovat řadu různých parametrů jako například počáteční a maximální hodnotu sekvence, velikost kroku nebo parametry pro využití cache, obvykle vystačíte s touto prostou podobou příkazu:

    CREATE SEQUENCE zakaznici_seq;
    

    Od chvíle kdy sekvenci vytvoříte, můžete kdykoliv přidělit políčku další hodnotu ze sekvence například pomocí příkazu:

    INSERT INTO zakaznici (zakaznik_id,nazev)
       VALUES (zakaznici_seq.nextval, 'Šroubek a Vroubek');
    

    Tímto příkazem vytvoříte nový záznam v tabulce ZAKAZNICI. Pole ZAKAZNIK_ID bude naplněno hodnotou ze sekvence (to zajišťuje zápis <jménoSeqvence>.nextval). Pokud se nechcete o vyplňování hodnot ze sekvence starat v aplikaci, stačí definovat trigger nad danou tabulkou:

    CREATE OR REPLACE TRIGGER zakaznici_ins
      BEFORE INSERT ON zakaznici
      FOR EACH ROW
      BEGIN
        SELECT zakaznici_seq.nextval 
               INTO :new.zakaznik_id
          FROM dual;
      END;
    /
    

    Tento trigger se automaticky spouští před vložením každého řádku (BEFORE INSERT, FOR EACH ROW). Protože sekvence je databázový objekt, nelze v Oracle provést prosté přiřazení, ale hodnotu je třeba načíst v dotazu. Ideální je použít speciální tabulku DUAL, která vždy vrací jediný záznam. Hodnota se v tomto případě načte do sloupce ZAKAZNIK_ID.

    Od této chvíle se vám budou při vkládání záznamů do tabulky ZAKAZNICI automaticky přiřazovat do pole ZAKAZNIK_ID hodnoty 1, 2, 3... atd.

    Vypadá to složitě? Možná. Nové tabulky ale obvykle nedefinujete každý den a použití sekvence v Oracle nabízí více možností, než jen prosté přidělování čísel po jedné:

    1. Pokud již před definicí automatického číslování máte v tabulce záznamy, jejichž ID chcete ponechat, stačí prostě nadefinovat sekvenci tak, aby začínala s hodnotou vyšší, než je nejvyšší stávající hodnota v tabulce. Pokud jsou tedy všechny hodnoty daného sloupce v tabulce nižší než 1000, stačí sekvenci nadefinovat takto:

      CREATE SEQUENCE zakaznici_seq START WITH 1000;
      

    2. Pokud importujete data do více tabulek a chcete, aby si importovaná data kvůli vzájemným vazbám ponechala původní identifikátory, deaktivujte před importem trigger:

      ALTER TRIGGER zakaznici_ins DISABLE;
      

      Po importu pak již stačí posunout sekvenci tak, aby nové hodnoty byly vyšší než ty importované (v uvedeném případě o 2000) a samozřejmě opětovně aktivovat trigger:

      SELECT zakaznici_seq.nextval
        FROM ALL_OBJECTS WHERE ROWNUM<=2000;
      
      ALTER TRIGGER zakaznici_ins ENABLE;
      

    3. Pokud potřebujete zajistit jednoznačnou identifikaci objektů umístěných ve více tabulkách, použijete pro všechny tabulky stejnou sekvenci.
    4. Hodnota v tabulce nemusí být tvořena jen hodnotou získanou ze sekvence, ale může být vytvořena výpočtem – například jmeno_lokality||zakaznici_seq.nextval.
    5. Sekvenci nemusíte používat jen pro generování jednoznačných identifikátorů záznamů, ale třeba i pro jména generovaných souborů či libovolných jiných objektů.
    6. Sekvenci můžete použít i jako logické hodiny – například při optimistickém zamykání záznamů ve webové aplikaci. V tom případě trigger definujete na INSERT i UPDATE a data ukládáte do samostatného sloupce v tabulce (samozřejmě již nejde o primární klíč). Před ukládáním hodnot z formuláře pak prostě porovnáte aktuální hodnotu uloženou v tabulce s hodnotou získanou při načítání hodnot do formuláře. Pokud po načtení záznamu do formuláře došlo ke změně dat, bude aktuální hodnota v tabulce vyšší než hodnota načtená do formuláře. (V 10g ale pro tyto účely spíše použijete pseudosloupec ORA_ROWSCN, který za vás naplňuje databáze sama. O tom ale až někdy příště).
    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 II. – jak na hierarchické struktury? (07.06.2006)

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

    Vyhledávání
     

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

    Nic 
     (800 hl.)
    Do 1 000,- Kč 
     (626 hl.)
    Do 10 000,- Kč 
     (601 hl.)
    Do 25 000,- Kč 
     (703 hl.)
    Do 50 000,- Kč 
     (621 hl.)
    Do 75 000,- Kč 
     (645 hl.)
    Více než 75 000,- Kč 
     (607 hl.)

    Celkem hlasovalo: 4603


    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