Uložená procedura

Technology
12 hours ago
8
4
2
Avatar
Author
Albert Flores

Uložená procedura (anglicky stored procedure) je databázový objekt, který neobsahuje data, ale část programu, který se nad daty v databázi má vykonávat.

Popis

Uložená procedura je především procedura. Jedná se o část programu, který je (nebo by alespoň měl být) jasně funkčně oddělený od svého okolí, má interface (seznam parametrů) pro komunikaci s jinými moduly programu. +more Může mít vlastní lokální 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 (indexu, pohledu, triggeru apod. +more). 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ů 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). +more ANSI SQL obsahuje část věnovanou uloženým procedurám - definuje programovací jazyk SQL/PSM, který je např. použit v SQL serverech DB2 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

Výhody

Oproti obvyklejšímu přístupu, kdy s daty pracuje přímo vlastní aplikace přistupující k databázi prostřednictvím SQL, uložené procedury jsou vykonávány přímo databázovým serverem. To může být v mnoha situacích velmi výhodné:

* Sdílení kódu: Relativně komplexní kód uložené procedury může být sdílen a využíván více aplikacemi přistupujícími k databázi, aniž by činnost procedury musela být implementována opakovaně v jednotlivých aplikacích. Zejména se tato výhoda projeví, pokud jsou jednotlivé aplikace vyvíjeny v různých programovacích jazycích.

* Jednoduché rozhraní: Ve vhodných případech může vést užití uložené procedury ke značnému zjednodušení rozhraní mezi aplikací a databází. Pokud aplikace k příslušným datům v databázi přistupuje výhradně voláním uložených procedur, pak je možné do značné míry měnit schéma databáze (včetně uložených procedur, avšak bez změn v rozhraní uložených procedur), aniž by si taková změna vyžádala změnu v kódu samotné aplikace.

* Opravitelnost: Mnohé chyby v kódu uložené procedury se dají opravovat bez nutnosti distribuovat a instalovat nové verze aplikace přistupující k databázi.

* 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 SELECT), upravit je do požadované podoby a poté je uložit zpět do databáze (typicky jedním nebo více příkazy UPDATE a INSERT). 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. +more 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. +more 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í kódu uložených procedur chudší než nástroje k ladění ve všestrannějších a rozšířenějších jazycích.

5 min read
Share this post:
Like it 8

Leave a Comment

Please, enter your name.
Please, provide a valid email address.
Please, enter your comment.
Enjoy this post? Join Cesko.wiki
Don’t forget to share it
Top