Uložená procedura: Porovnání verzí

Smazaný obsah Přidaný obsah
Surikatu (diskuse | příspěvky)
upřesnění deklarace, definice, externí procedury, odkaz na SQL/PSM
Řádek 4:
Uložená procedura je především '''[[procedura]]'''. Jedná se o část programu, který je (nebo by aspoň měl být) jasně funkčně oddělený od svého okolí, má interface (seznam parametrů) pro komunikaci s jinými moduly programu. Může mít vlastní lokální [[Proměnná|proměnné]] neviditelné pro ostatní části programu.
 
Uložená procedura je '''uložená''' (rozuměj: uložená v databázi). To znamená, že se k ní lze chovat stejně jako ke každému jinému objektu databáze ([[Index (databáze)|indexu]], [[Pohled (databáze)|pohledu]], [[Trigger (databáze)|triggeru]] apod.). Lze jí založit, upravovat a smazat pomocí příkazů dotazovacího jazyka databáze (v případě [[relační databáze]] obvykle pomocí příkazů [[SQL|DDL SQL]]). Deklarace uložené procedury je vždy "uložena" v databázi - vlastní definice pak v databázi být uložena nemusí - příkladem jsou tzv. externí procedury, kdy v deklaraci je uveden pouze odkaz do externí knihovny.
 
Pro psaní uložených procedur je obvykle používán specifický jazyk konkrétní databáze, který je buďto rozšířením jejího dotazovacího jazyka (např. T-SQL) nebo specifický procedurální jazyk s podporou SQL (hezkým příkladem je pro databázi [[Oracle]] procedurální jazyk [[PL/SQL]] - v tomto případě se jedná o programovací jazyk ADA rozšířený o SQL). ANSI SQL obsahuje část věnovanou uloženým procedurám - definuje programovací jazyk [[SQL/PSM]], který je rozšířenímnapř. klasickéhopoužit dotazovacíhov jazykaSQL serverech [[SQLDB2]] nebo [[MySQL]]). Většina moderních databázových systémů podporuje implementaci uložených procedur i v klasických programovacích jazycích - Java, C#, C a dalších - a to v těch případech, kdy nám specifické jazyky z důvodů omezené funkčnosti nebo výkonu nevyhovují.
 
== Vlastnosti ==
Řádek 21:
 
* '''Menší přesuny dat:''' Pokud aplikace přímo manipuluje s daty v databázi takovým způsobem, který se nedá přímo vyjádřit v jazyce SQL, pak bez použití uložené procedury musí nejdříve všechna relevantní data z databáze vybrat (typicky jedním nebo více příkazy <code>[[SELECT]]</code>), upravit je do požadované podoby a poté je uložit zpět do databáze (typicky jedním nebo více příkazy <code>[[UPDATE]]</code> a <code>[[INSERT]]</code>). Uložená procedura v takovém případě může ušetřit přenosy dat mezi databázovým serverem a aplikací v obou směrech. Zejména v případě, že aplikace běží na jiném [[počítač]]i než databáze, může být rozdíl v čase a v zatížení sítě markantní.
 
* '''Binární kompatibilita a uložené prováděcí plány''' - Implementačně je snaha docílit kompatibility formátů dat používaných tzv. SQL jazyky (T-SQL, PL/SQL, PL/pgSQL, SQL/PSM) s formáty používanými v SQL serveru. Tím odpadá nutnost konverzí formátů a radikálnímu snížení zátěže procesoru. V těchto programovacích jazycích také dochází k automatickému převodu SQL příkazů na tzv [[prepared statements]] - což zrychluje opakované provádění těchto příkazů a představuje spolehlivou ochranu proti [[SQL injection]].
 
=== Nevýhody ===
 
* Jazyky uložených procedur jsou obecně mezi různými databázovými servery navzájem nekompatibilní (SQL/PSM definované standardem zdaleka není široce rozšířeným jazykem). Některé databázové servery nepodporují uložené procedury vůbec.
 
* Většinou jsou prostředky pro [[Ladění (software)|ladění]] kódu uložených prostředků chudší než nástroje k ladění ve všestranějšíchvšestrannějších a rozšířenějších jazycích.