Dnes: 17. prosince 2017    | 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?
    Replikace
    Replikace slouží pro zajištění konzistentnosti dvou a více databází, nejčastěji pak o stejné struktuře v rámci distribuovaného zpracování. Vyspělé SŘBD replikace podporují, případně lze použít řešení třetích stran či replikační logiku zajistit vlastními postupy.

    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 V. – změna dat v pohledu?


    [Tipy - triky] - V pátém pokračování 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 změnit data v pohledech i tehdy, když to běžným způsobem nelze. 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í.



    Přes některé pohledy lze měnit data v tabulkách. Jak ale zajistit možnost měnit data přes pohled i v případech, kdy to pohled sám o sobě neumí? Řešením mohou být tzv. instead-of triggery. Občas se ukáže, že původně navržený datový model neodpovídá požadavkům nově implementovaných modulů aplikace a je potřeba jej změnit. Někdy je ale změna taková, že původní moduly již nad novým modelem nefungují. Jedním ze způsobů, jak rychle zajistit funkčnost starších modulů, může být definice pohledu (view), který vytváří původní strukturu nad novým datovým modelem.

    Pohled může také představovat implementaci rozhraní mezi více aplikacemi pracujícími se společnými daty. I v těchto případech může být požadováno, aby aplikace přistupující přes tento pohled byly schopny měnit data.

    Zda databázová platforma Oracle umožní úpravy dat přes pohled závisí nejen na konstrukcích použitých při definici pohledu, datovém modelu (především primárních klíčích), ale i na konkrétním příkazu měnícím data. Co když ale vaše aplikace vyžaduje provádění změn, avšak využívaný pohled změnu dat neumožňuje?

    Elegantním řešením je použití instead-of triggerů nad pohledem. Zatím co běžným triggerem definujete operace, které se mají provést před nebo po dané operaci, instead-of triggerem (jak říká název) definujete operace, které se mají provést namísto dané DML operace.

    Představte si tedy situaci, kdy máte aplikaci, která má v seznamu zaměstnanců přímo uvedeny i kompletní informace o oddělení, ve kterém pracují. V rámci změn oddělíte z tabulky zaměstnanců informace o oddělení do tabulky ODDELENI. Nová podoba datové struktury tedy vypadá takto:

    CREATE TABLE oddeleni (
      oddcis NUMBER PRIMARY KEY,
      nazev VARCHAR2(100),
      adresa  VARCHAR2(100));
    
    CREATE TABLE zamestnanci (
      zamcis NUMBER PRIMARY KEY,
      jmeno VARCHAR2(100),
      oddcis NUMBER REFERENCES oddeleni(oddcis));
    
    CREATE VIEW zamview AS
      SELECT z.zamcis,z.jmeno, 
             z.oddcis, o.nazev, o.adresa
      FROM zamestnanci z, oddeleni o
      WHERE z.oddcis=o.oddcis(+);
    

    Takto vytvořený pohled neumožňuje měnit data ve sloupcích, které pocházejí z tabulky ODDELENI. Pokus o takovou operaci skončí chybou:

    INSERT INTO zamview 
        (zamcis, jmeno, oddcis, nazev, adresa)
      VALUES 
        (1, 'David Krch',10, 'Obchodní oddělení', 
         'Škrétova 12, Praha 2');
    
    INSERT INTO zamview 
        (zamcis, jmeno, oddcis, nazev, adresa)
                                *
    ERROR at line 1:
    ORA-01776: cannot modify more than one base table through a join view
    

    Důvodem je to, že DML operace nad pohledem mohou běžně měnit jen data v jedné tabulce. Řešením je vytvoření instead-of triggeru, kterým definujete, jak mají změnové operace probíhat:

    CREATE TRIGGER zamview_insupd
      INSTEAD OF INSERT OR UPDATE ON zamview
      FOR EACH ROW
    BEGIN
      UPDATE oddeleni
        SET nazev=:new.nazev,
            adresa=:new.adresa
        WHERE oddcis=:new.oddcis;
    
      IF SQL%ROWCOUNT=0 THEN
        INSERT INTO oddeleni 
            (oddcis, nazev, adresa)
          VALUES 
            (:new.oddcis, :new.nazev, :new.adresa);
      END IF;
    
      IF INSERTING then
        INSERT INTO zamestnanci 
            (zamcis, jmeno, oddcis)
          VALUES 
            (:new.zamcis,:new.jmeno,:new.oddcis);
      ELSE
        UPDATE zamestnanci
          SET jmeno=:new.jmeno,
              oddcis=:new.oddcis
          WHERE zamcis=:new.zamcis;
      END IF;
    END;
    /
    

    Trigger nejprve uloží změněné informace do tabulky ODDELENI – pokud záznam existuje, upraví jej, pokud neexistuje, přidá jej. Následně provede původně požadovanou změnu v tabulce ZAMESTNANCI.

    Na závěr tedy zbývá vše otestovat:

    INSERT INTO zamview 
        (zamcis, jmeno, oddcis, nazev, adresa)
      VALUES 
        (1, 'David Krch',10, 'Obchodní oddělení', 
         'Škrétova 12, Praha 2');
    
    1 row created.
    

    Více se o triggerech v databázové platformě Oracle dovíte v manuálu Oracle Application Developer’s Guide –Fundamentals.

    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 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)
    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ářů: 8 | Přidat komentář | Informační e-mailVytisknout článek )

    Vyhledávání
     

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

    Nic 
     (1507 hl.)
    Do 1 000,- Kč 
     (1044 hl.)
    Do 10 000,- Kč 
     (978 hl.)
    Do 25 000,- Kč 
     (1347 hl.)
    Do 50 000,- Kč 
     (994 hl.)
    Do 75 000,- Kč 
     (1151 hl.)
    Více než 75 000,- Kč 
     (993 hl.)

    Celkem hlasovalo: 8014


    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ář
    <<  Prosinec  >>
    PoÚtStČtSoNe
        123
    45678910
    11121314151617
    18192021222324
    25262728293031

    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