Dnes: 18. ledna 2018    | 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?
    Konkurenční přístup
    Situace, kdy k jednomu zdroji dat (nejčastěji stejným záznamům v tabulce) přistupuje současně více uživatelů. Jedním z úkolů vyspělého SŘBD je zajistit, aby nedošlo k porušení konzistence dat (například aby uživatel z tabulky četl vždy aktuální data).

    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.
    Vyvíjíme databázový a informační systém XXI.


    [Metodologie] - {Začátečníci} Na začátku třetí desítky dílů našeho rozsáhlého seriálu o základních principech a o vývoji databázových a informačních systémů se podíváme na problematiku uložených procedur. Ty souvisí mj. s tzv. procedurálním rozšířením jazyka SQL. Podíváme se v této souvislosti také na transakce, a to právě z pohledu procedurálních rozšíření.



    Některé z databázových platforem podporují jednu z odnoží jazyka SQL označovanou jako T-SQL (Transact SQL) . Mezi podporující platformy patří například MS SQL Server nebo Sybase Adaptive Server. MySQL jazyk T-SQL nepoužívá, tj. není systémem správy transakčních databází.

    Samotnou transakcí je potom myšlena v rámci systému uzavřená a nedělitelná operace – proto je označování procedurální rozšíření jazyka SQL jako transakční rozšíření nepřesné. Ona nedělitelnost operace je vlastností důležitou, neboť v důsledku zamezí vzniku nekonzistence v datech. Pokud by totiž došlo během vykonávání transakce k výpadku systému, který by zabránil dokončení operace, byl by systém schopen navrátit stav existující před začátkem provádění transakce až

    Základem je, že všechny příkazy jazyka T-SQL jsou před vlastním vykonáním zpracovány databázovým strojem. Příkazy mohou být tedy nejdříve načteny do vyrovnávací paměti a může být sestaven optimální prováděcí plán. Tím, že databázový stroj vidí všechny příkazy ještě předtím než jsou fyzicky provedeny, umožňuje případný "návrat zpět". Když po zadání několika příkazů není vše v pořádku, lze započatou transakci ukončit, popř. úplně odvolat. Můžeme tedy například chtít dopředu vědět, jak dlouho bude trvat zpracování nějakého složitějšího dotazu. Samozřejmě, že v databázi by prozatím žádné změny neproběhly. Cenou za tento způsob zpracování je snížený výkon systému. Jednoduše se někde musí projevit čas strávený při ověřování příkazu(ů), místo jejich přímého provádění.

    Uložené procedury
    Dalším prvkem, který využívá výhod jazyka T-SQL, jsou uložené procedury. Jedná se o posloupnosti (mnohdy předkompilovaných) příkazů SQL a příkazů pro řízení běhu. Jde o významné vylepšení standardních možností jazyka SQL dovolující nám používat parametry, deklarovat proměnné, větvit běh příkazů a taktéž možnost navracení hodnoty.

    Jednoduché přiblížení činnosti uložené procedury spočívá v představě sestaveného podprogramu nebo funkce, která bude následně uložena jako nový objekt databáze. Uložené procedury běží na SQL serveru, a nikoli na klientu, který zadal dotaz. Uložené procedury zpravidla obsahují posloupnost příkazů jazyka SQL a příkazy pro řízení běhu, které zpracovávají tabulky z databáze.

    Speciálním druhem uložené procedury je tzv. trigger (spouštěč), který je automaticky vyvoláván v okamžiku, když dojde k určité nastavené změně dat v tabulce. Může být navázán třeba na přidání nových dat, jejich aktualizaci či výmaz. Triggery se využívají pro kaskádové zřetězení změn v souvisejících tabulkách. Jinými slovy se jedná o systém automatického vyvolávání činností, které vedou k zachování integrity databáze. Za nevýhodu aktivačních procedur lze považovat fakt, že při každé operaci musí server zjišťovat, zda se na ni neváže nějaká procedura. Tím ztrácí čas a tolik žádaný výkon. Jako téměř vždy je tedy na pořadu otázka vhodného kompromisu.

    Za klady uložených procedur lze považovat:

    • Získáváme na výkonu v porovnání s posloupností standardních příkazů SQL, neboť příkazy jsou v uložených procedurách obvykle předkompilovány. Při prvním provádění uložené procedury je vytvořen prováděcí plán činnosti. Plán je po vytvoření uložen do vyrovnávací paměti a následné opakování téže procedury je pak mnohem rychlejší než provádění obdobných příkazů SQL.
    • Pomocí uložených procedur lze vykonat složitější operace, než bychom vykonali přímo pomocí SQL.
    • Významným kladem je nepřerušitelnost provádění procedury. Po jejím spuštění je procedura provedena sekvenčně jako celek, i když má třeba vnitřní strukturu složitou. Správná konstrukce procedur potom zajišťuje minimum kolizí s integritními omezeními.
    • Možnost nastavování a předávání parametrů umožňuje propojení více uložených procedur, a tím vlastně vytvářet jakési dávkové programy.
    • Umožňují vytvořit další vrstvu zabezpečení databáze. Existuje totiž možnost zrušit uživatelům veškerý přístup k tabulkám a pohledům (zamezíme uživatelům přímý přístup) a vytvoříme uložené procedury, které mohou pracovat s těmito objekty databáze. Uživatelům pak stačí přidělovat práva pro spuštění (execute) procedur.
    • Velká část aplikační logiky může být přesunuta na databázový server – díky uloženým procedurám s vlastními proměnnými, podmínkami, cykly, popř. vyvoláváním vestavěných funkcí databázového serveru.

    Za nevýhodu uložených procedur lze považovat zejména nutnost správy procedur – parametry, vlastnosti, vhodnost použití…

    Vytvoření procedury
    Stejně jako u běžných programovacích jazyků pod pojmem procedura rozumíme blok kódu se vstupními parametry. Vstupní hodnoty se pak v těle procedury zpracují a výsledkem činnosti může být nějaká úprava údajů z databázové tabulky, popřípadě lze odevzdat výsledek výpočtu či vytvořený řetězec. Uloženou proceduru vytváříme pomocí příkazu create procedure.

    create procedure nazev_procedury (seznam_parametrů) as
    begin
      tělo procedury
    end
    

    Vytvoříme nyní proceduru bez parametrů:

    create procedure cisteni as
    begin
      delete from tabulka_1;
      delete from tabulka_2;
      delete from tabulka_3;
    end
    

    Pokud se například tabulka_1 odkazuje do tabulky_2 a tabulky_3, tak můžeme považovat za výhodu už to, že bude při mazání obsahu tabulek automaticky pamatováno na správné pořadí a s referenční integritou nemusí být problémy. Také si nemusíme pamatovat názvy původních tabulek a navíc lze jednoduše odstupňovat práva k tomuto úkonu "čištění". Přístupové právo k proceduře cisteni by měl nejspíše jen správce databáze či administrátor aplikace.

    Vytvořenou proceduru cisteni lze poté spouštět pomocí příkazu execute:

      execute cisteni;
    

    Vstupní parametry každé procedury jsou dány svými názvy a příslušnými datovými typy. Seznam parametrů je při vytváření procedury uveden v kulatých závorkách za názvem procedury. Pro odlišení názvů sloupců tabulek a názvů lokálních proměnných se používá dvojtečková konvence. Je-li tedy uvedena před názvem dvojtečka, jde o název lokální proměnné. Pokud bychom tedy chtěli například smazat určitou osobu podle předeného rodného čísla, vypadalo by to například takto:

    create procedure rc_delete(rc_prom varchar(10)) as
    begin
      delete 
        from Zamestnanec 
          where rc = :rc_prom;
    end
    

    Proceduru s uvedeným parametrem – rodné číslo mazané osoby – bychom pak spustili pomocí příkazu:

    execute procedure rc_delete "7258304460";
    

    Pokud by měla procedura více parametrů, oddělovali bychom je v definici pomocí čárky a podobně při vyvolávání procedury se pak musí uvést potřebné parametry oddělené čárkou, samozřejmě také ve správném pořadí. Další možností vylepšení je pro některé případy procedur uvedení návratové hodnoty s výsledkem operace (někdy hovoříme o uložených funkcích). Potřebujeme-li tedy, aby procedura navracela hodnoty, uvedeme seznam vracených proměnných v závorce za klíčovým slovem returns. Například bychom chtěli zavést proceduru pro výpočet následujícího členu Fibonacciovy posloupnosti s uvedením dvou potřebných předcházejících členů (parametrů):

    create procedure Fib_clen 
      (prom_1 integer, prom_2 integer) 
     returns (clen integer) as
    begin
      :clen = :prom_1 + :prom_2;
    end
    

    Následuje vyvolání procedury pro vlastní výpočet. Musí být však dopředu deklarována výstupní proměnná – třeba prom. Proceduru vyvoláme příkazem s klíčovým slovem returning values před výstupním parametrem:

    execute procedure Fib_clen 3, 5 returning values :prom;
    


    Související články:
    Vyvíjíme databázový a informační systém XXV. (28.12.2004)
    Vyvíjíme databázový a informační systém XXIV. (27.12.2004)
    Vyvíjíme databázový a informační systém XXIII. (16.12.2004)
    Vyvíjíme databázový a informační systém XXII. (07.12.2004)
    Vyvíjíme databázový a informační systém XX. (03.11.2004)
    Vyvíjíme databázový a informační systém XIX. (25.10.2004)
    Vyvíjíme databázový a informační systém XVIII. (13.10.2004)
    Vyvíjíme databázový a informační systém XVII. (04.10.2004)
    Vyvíjíme databázový a informační systém XVI. (21.09.2004)
    Vyvíjíme databázový a informační systém XV. (13.09.2004)
    Vyvíjíme databázový a informační systém XIV. (25.08.2004)
    Vyvíjíme databázový a informační systém XIII. (18.08.2004)
    Vyvíjíme databázový a informační systém XII. (02.08.2004)
    Vyvíjíme databázový a informační systém XI. (14.07.2004)
    Vyvíjíme databázový a informační systém X. (07.07.2004)
    Vyvíjíme databázový a informační systém IX. (01.07.2004)
    Vyvíjíme databázový a informační systém VIII. (23.06.2004)
    Vyvíjíme databázový a informační systém VII. (16.06.2004)
    Vyvíjíme databázový a informační systém VI. (09.06.2004)
    Vyvíjíme databázový a informační systém V. (02.06.2004)
    Vyvíjíme databázový a informační systém IV. (26.05.2004)
    Vyvíjíme databázový a informační systém III. (19.05.2004)
    Vyvíjíme databázový a informační systém II. (12.05.2004)
    Vyvíjíme databázový a informační systém I. (05.05.2004)

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

    Vyhledávání
     

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

    Nic 
     (1548 hl.)
    Do 1 000,- Kč 
     (1068 hl.)
    Do 10 000,- Kč 
     (999 hl.)
    Do 25 000,- Kč 
     (1378 hl.)
    Do 50 000,- Kč 
     (1016 hl.)
    Do 75 000,- Kč 
     (1178 hl.)
    Více než 75 000,- Kč 
     (1019 hl.)

    Celkem hlasovalo: 8206


    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ář
    <<  Leden  >>
    PoÚtStČtSoNe
    1234567
    891011121314
    15161718192021
    22232425262728
    293031    

    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