Uložené procedury

Aktuální verze stránky ještě nebyla zkontrolována zkušenými přispěvateli a může se výrazně lišit od verze recenzované 27. května 2020; kontroly vyžadují 5 úprav .

Uložená procedura  je databázový objekt , což je sada příkazů SQL  , která je jednou zkompilována a uložena na serveru. Uložené procedury jsou velmi podobné běžným procedurám ve vyšších jazycích , mohou mít vstupní a výstupní parametry a lokální proměnné , mohou provádět numerické výpočty a operace se znakovými daty, jejichž výsledky lze přiřadit proměnným a parametrům. Uložené procedury mohou provádět standardní databázové operace (jak DDL , tak DML ). Kromě toho jsou v uložených procedurách možné smyčky a větvení, to znamená, že mohou používat instrukce k řízení procesu provádění.

Uložené procedury jsou podobné uživatelským funkcím (UDF). Hlavní rozdíl je v tom, že uživatelsky definované funkce lze použít jako jakýkoli jiný výraz v dotazu SQL, zatímco uložené procedury je nutné volat pomocí funkce CALL:

Postup ZAVOLEJTE ( ... )

nebo

EXECUTE postup ( ... )

Uložené procedury mohou vracet sady výsledků, tedy výsledky dotazu SELECT. Takové sady výsledků lze zpracovat pomocí kurzorů, jinými uloženými procedurami vracejícími ukazatel sady výsledků nebo aplikacemi. Uložené procedury mohou také obsahovat deklarované proměnné pro práci s daty a kurzory, které umožňují procházet více řádky v tabulce. Standard SQL poskytuje IF, LOOP, REPEAT, CASE a mnoho dalších výrazů pro práci. Uložené procedury mohou přijímat proměnné, vracet výsledky nebo měnit proměnné a vracet je v závislosti na tom, kde je proměnná deklarována.

Implementace uložených procedur se u jednotlivých DBMS liší. Většina velkých dodavatelů databází je podporuje v té či oné podobě. V závislosti na DBMS mohou být uložené procedury implementovány v různých programovacích jazycích, jako je SQL, Java, C nebo C++. Uložené procedury, které nejsou napsány v SQL, mohou nebo nemusí samy provádět dotazy SQL. Rostoucí používání uložených procedur vedlo k objevení se procedurálních prvků v jazyce SQL standardů SQL:1999 a SQL:2003 v části SQL/PSM . To udělalo z SQL imperativní programovací jazyk. Většina DBMS nabízí svá vlastní proprietární a dodavatelská rozšíření nad rámec SQL/PSM.

Implementace uložených procedur

Uložené procedury jsou obvykle vytvářeny pomocí jazyka SQL a jeho specifické implementace ve zvoleném DBMS . Například pro tyto účely má DBMS Microsoft SQL Server jazyk Transact-SQL , Oracle  - PL/SQL , InterBase a Firebird  - PSQL , PostgreSQL  - PL/pgSQL , PL/Tcl , PL/Perl , PL/Python , IBM DB2  - SQL / PL , v Informix - SPL . MySQL se poměrně úzce řídí standardem SQL:2003 a jeho jazyk je podobný SQL/PL.

V některých DBMS je možné použít uložené procedury napsané v jakémkoli programovacím jazyce schopném vytvářet nezávislé spustitelné soubory, jako je C++ nebo Delphi . V terminologii Microsoft SQL Server se takové procedury nazývají rozšířené uložené procedury a jsou jednoduše funkcemi obsaženými v Win32 DLL . A například v Interbase a Firebirdu pro funkce volané z DLL / SO je definován jiný název - UDF (User Defined Function). MS SQL 2005 zavedl možnost psát uložené procedury v libovolném jazyce .NET a v budoucnu se plánuje opuštění rozšířených uložených procedur. Oracle DBMS zase umožňuje psát uložené procedury v jazyce Java . [1] V IBM DB2 je psaní uložených procedur a funkcí v konvenčních programovacích jazycích tradičním způsobem, podporovaným od počátku, a procedurální rozšíření SQL bylo do tohoto DBMS přidáno až poměrně pozdě poté, co bylo zahrnuto do standardu ANSI. . Informix také podporuje procedury Java a C. [2]

V Oracle DBMS lze uložené procedury kombinovat do tzv. balíčků .  Balíček se skládá ze dvou částí - specifikace ( angl. package specification ), která specifikuje definici uložené procedury, a těla ( angl. package body ), kde se nachází její implementace. Oracle tak umožňuje oddělit rozhraní programového kódu od jeho implementace.   

V IBM DB2 lze uložené procedury kombinovat do .

V PostgreSQL je kromě uložených procedur možné vytvářet funkce, které vracejí void type .

Účel a výhody uložených procedur [3]

Uložené procedury zlepšují výkon, rozšiřují možnosti programování a podporují funkce zabezpečení dat.

Místo ukládání často používaného dotazu mohou klienti odkazovat na příslušnou uloženou proceduru. Při volání uložené procedury je její obsah serverem okamžitě zpracován.

Uložené procedury umožňují kromě samotného provádění dotazu také provádět výpočty a manipulovat s daty – měnit, mazat, spouštět příkazy DDL (ne ve všech DBMS!) a volat další uložené procedury, provádět složitou transakční logiku. Jediný příkaz umožňuje volat složitý skript, který je obsažen v uložené proceduře, čímž se vyhnete odesílání stovek příkazů po síti a zejména nutnosti přenášet velké množství dat z klienta na server.

Ve většině DBMS je uložená procedura při prvním spuštění zkompilována (analyzována a je vygenerován plán přístupu k datům). V budoucnu je jeho zpracování rychlejší. Oracle DBMS interpretuje uložený procedurální kód uložený v datovém slovníku . Počínaje Oracle 10g je podporována tzv. nativní kompilace (nativní kompilace) uloženého procedurálního kódu v C a následně do strojového kódu cílového stroje, načež je při volání uložené procedury přímo její zkompilovaný objektový kód popraven.

Funkce programování

Vygenerovanou uloženou proceduru lze volat kdykoli, což poskytuje modularitu a podporuje opětovné použití kódu . Ten usnadňuje údržbu databáze, protože se izoluje od měnících se obchodních pravidel. Uloženou proceduru můžete kdykoli upravit tak, aby vyhovovala novým pravidlům. Poté budou všechny aplikace, které jej využívají, automaticky odpovídat novým obchodním pravidlům bez přímých úprav.

Pro zjednodušení testování, nezávislosti obchodní logiky aplikací na DBMS, existuje přístup, kdy DBMS funguje pouze jako úložiště, s minimálním počtem uložených procedur nebo s jejich úplným odmítnutím. V tomto případě se používá mapování softwarových entit obchodní logiky na úložiště. Viz ORM (eng. Object-relational mapping, rus. Object-relational mapping)

Zabezpečení

Použití uložených procedur umožňuje omezit nebo zcela vyloučit přímý přístup uživatelů k databázovým tabulkám, přičemž uživatelům ponechává pouze oprávnění spouštět uložené procedury, které poskytují nepřímý a přísně regulovaný přístup k datům. Některé DBMS navíc podporují textové šifrování (zabalení) uložené procedury.

Tyto funkce zabezpečení umožňují izolovat strukturu databáze od uživatele, což zajišťuje integritu a spolehlivost databáze.

Akce jako " vložení SQL " jsou méně pravděpodobné, protože dobře napsané uložené procedury navíc ověřují vstupní parametry před předáním dotazu do DBMS.

Poznámky

  1. OracleJVM a Java uložené  procedury . Věštec Inc.. - Sekce portálu věštce oddaného jávským technologiím jako součást serveru Oracle DBMS. Získáno 6. června 2009. Archivováno z originálu dne 21. srpna 2011.
  2. J/Foundation Developer's  Guide . IBM. — Část dokumentace Informix o vývoji uložených procedur v jazyce Java. Získáno 9. února 2011. Archivováno z originálu 10. února 2012.
  3. Návrh a implementace databází Microsoft SQL Server. - M.-SPb.: ruské vydání, Peter, 2005. - 512 s. — ISBN 5-7502-0089-2 , ISBN 5-469-00821-5 .

Odkazy