Stáhnout prezentaci
Prezentace se nahrává, počkejte prosím
ZveřejnilDalibor Slavík
1
Databázové systémy II Přednáška V Ing. Tomáš Váňa, Ing. Jiří Zechmeister Fakulta elektrotechniky a informatiky tomas.vana@upce.cz, jiri.zechmeister@upce.cz
2
Obsah přednášky PL/SQL Subprogramy (PL/SQL Subprograms) – Procedury – Funkce Balíčky Přizpůsobení chybových podmínek 2 IDAS2 - Přednáška V
3
PL/SQL Subprograms PL/SQL subprogram je pojmenovaný PL/SQL blok. – Takto pojmenovaný blok může být volán s množinou parametrů. – Subprogram může být procedurou nebo funkcí. – Subprogram lze vytvořit na úrovni schématu, balíčku nebo uvnitř jiného bloku PL/SQL (který též může byt subprogram). Důvody k používaní PL/SQL subprogramů – Rozšiřují možnosti PL/SQL. – Modularizace – Znuvupoužitelnost – Specifická forma zapouzdření 3 IDAS2 - Přednáška V
4
PL/SQL Subprograms Používání procedur může zvýšit výkon: – Zpracování složitých byznys pravidel lze přesunout do databáze. Přesun zpracování z aplikace na klienta navíc sníží komunikační zátěž mezi klientem a databázovým serverem. – Procedurální kód je v databázi uchováván v poměrně statické formě, proto lze těžit z opětovného využití stejných dotazů. Kromě toho procedury umožňují konsolidovat byznys pravidla uvnitř databáze. – Není nutné je zapisovat do různých aplikaci. IDAS2 - Přednáška V 4
5
PL/SQL Subprograms Součásti subprogramu: – Subprogram má vždy jméno; může obsahovat seznam parametrů. – Deklarační část - není explicitně definována. Za deklarační část subprogramu se považuje vše mezi hlavičkou subprogramu a výkonou částí. – Výkonná část a část obsluhy výjimek jsou stejné jako u PL/SQL bloku. 5 IDAS2 - Přednáška V
6
PL/SQL Subprograms - práva Potřebná systémová oprávnění – CREATE PROCEDURE Při vytváření procedurálního objektu je nutné mít práva ke všem referencovaným objektům uvnitř objektu. Uživatel pak musí mít nad daným objektem právo EXECUTE. Spuštěná procedura pak může běžet ve dvou režimech. – S právy definujícího uživatele (definer rights) - procedura běží se všemi právy definujícího uživatele, tudíž volajícímu uživateli stačí mít jen právo na spuštění samotné procedury. – S právy volajícího uživatele (invoker righs) - procedura spoléhá na to, že volající uživatel má práva ke všem definovaným objektům uvnitř procedury. IDAS2 - Přednáška V 6
7
Procedury Syntaxe: CREATE [OR REPLACE] PROCEDURE [( )] AS … deklarační sekce …………………………. BEGIN … výkonná sekce …………………………. EXCEPTION … sekce pro zpracování výjimek …………………………. END; 7 IDAS2 - Přednáška V
8
Procedury Příklad: CREATE [OR REPLACE] PROCEDURE zvyseni_mzdy (procento IN NUMBER) AS BEGIN UPDATE pracovnici SET mzda = mzda * (1+procento/100); COMMIT; END; IDAS2 - Přednáška V 8
9
Procedury Volání procedury: EXECUTE zvyseni_mzdy(6); nebo EXEC zvyseni_mzdy(6); nebo BEGIN zvyseni_mzdy(6); END; 9 IDAS2 - Přednáška V
10
Funkce Syntaxe CREATE [OR REPLACE] FUNCTION [( )] RETURN AS … deklarační sekce …………………………. BEGIN … výkonná sekce …………………………. RETURN ; EXCEPTION … sekce pro zpracování výjimek …………………………. END; 10 IDAS2 - Přednáška V
11
Funkce Příklad CREATE [OR REPLACE] FUNCTION pocet_smen (Id_trp IN NUMBER) RETURN NUMBER AS v_pocet NUMBER; BEGIN SELECT count(*) INTO v_pocet FROM tezby WHERE Id_trpaslika=Id_trp AND skutecnost>0; RETURN v_pocet ; END; Použití funkce SELECT Jmeno, pocet_smen(Id) Pocet_smen FROM trpaslici; 11 IDAS2 - Přednáška V
12
Procedury vs. funkce - deklarace Velmi podobné struktura definice, až na následující rozdíly: – Hlavička funkce musí obsahovat klauzuli RETURN, která specifikuje návratový typ funkce. Hlavička procedury nesmí obsahovat klauzuli RETURN. – Funkce musí mít alespoň jeden příkaz RETURN ve výkonné části. Pro procedury je využití příkazu RETURN uvnitř výkonné sekce volitelné. 12 IDAS2 - Přednáška V
13
Procedury vs. funkce - použití Funkci, oproti proceduře lze využít v libovolném příkaze DML. Při volaní funkce z DML příkazu platí následující omezení: – Pokud je funkce volána z příkazu SELECT, nebo z paralelizovaných příkazů INSERT, UPDATE a DELETE, nesmí funkce modifikovat data v libovolné tabulce databáze. – Pokud je funkce volána z příkazů INSERT, UPDATE a DELETE, nesmí funkce modifikovat tabulky, které modifikují volající příkazy. – Pokud je funkce volána z příkazů SELECT, INSERT, UPDATE a DELETE, nesmí funkce využívat příkazy pro řízení transakcí (např. COMMIT). To automaticky vylučuje využití DDL příkazů uvnitř těchto funkcí. 13 IDAS2 - Přednáška V
14
Příkaz RETURN Příkaz RETURN okamžitě ukončí vykonávání PL/SQL subprogramu a vrátí řízení nad během programu volajícímu. Každý subprogram může obsahovat více RETURN příkazů. Provedení jediného z nich má za následek okamžité ukončení subprogramu. V proceduře nesmí obsahovat RETURN příkaz žádný výraz. Naopak příkaz RETURN uvnitř funkce musí obsahovat výraz. 14 IDAS2 - Přednáška V
15
Parametry Parametry subprogramů mohou fungovat ve třech režimech: – IN, IN OUT a OUT IN mód – Výchozí mód. Není nutné definovat. – Parametr se pak pro subprogram chová jako konstanta. Nemůže ji být přiřazena hodnota. OUT mód – Přes OUT parametr je možné vrátit volajícímu hodnotu ze subprogramu -> procedura pak může vracet hodnotu. – Z pohledu subprogramu se OUT parametr chová jako běžná proměnná. Lze měnit její hodnotu. – Volající subprogram pak musí do OUT parametru přiřadit proměnnou. Nesmí se jednat o konstantu či výraz. IN OUT mód – Kombinace IN a OUT. 15 IDAS2 - Přednáška V
16
Parametry 16 OUT a IN OUT se doporučuje používat pouze u procedur. Funkce by měla vracet vždy jen jednu hodnotu. IDAS2 - Přednáška V
17
Parametry - výchozí hodnoty IN parametrům je možné přiřadit výchozí hodnotu. – Tyto parametry je pak možné při volání vypustit. 17 IDAS2 - Přednáška V
18
Balíčky Balíček (PACKAGE) je databázový objekt logicky seskupující PL/SQL typy, proměnné a subprogramy. Každý balíček se skládá ze dvou částí – specifikace („SPEC“) - rozhraní balíčku. Deklaruje vše co má být viditelné z „venku“ – těla (BODY) - obsahuje implementaci objektů definovaných ve specifikaci a obsahuje též privátní objekty balíčku. 18 IDAS2 - Přednáška V
19
Balíčky 19 IDAS2 - Přednáška V
20
20 IDAS2 - Přednáška V
21
Balíčky - využívání 21 IDAS2 - Přednáška V
22
Používání balíků Výhody balíků -Zvětšují obor názvů – může být použit stejný název procedury v různých balících -V jednom balíku může být mnoho procedur, ale v datovém slovníku bude existovat pouze jeden objekt – balík, namísto jednoho objektu slovníku pro každou proceduru nebo funkci bez použití balíků -Podporují zapouzdření, části kódu (podřízené rutiny), které nemají využití mimo balík, jsou ukryty v balíku a mimo něj nejsou viditelné a jsem jediným, kdo je může zobrazit -Podporují proměnné uchovávané po celou dobu relace - můžete mít proměnné, které si udrží své hodnoty mezi jednotlivými voláními v databázi -Podporují spouštěcí kód – tj. úsek kódu, který se provede při prvním odkazu na balík v relaci, tj. umožňuje automatické provedení složitého inicializačního kódu -Umožňují seskupení souvisejících funkcí 22 IDAS2 - Přednáška V
23
Přizpůsobení chybových podmínek U každé chybové podmínky, kterou definujete, můžete navolit chybovou zprávu, jež se v případě výskytu chyby zobrazí. Čísla chyb a zprávy, které se uživateli zobrazí, nastavíte v proceduře RAISE_APPLICATION_ERROR, kterou lze volat z libovolného procedurálního objektu. Procedura RAISE_APPLICATION_ERROR má dvě vstupní hodnoty: číslo chybové zprávy a text zprávy. – Číslo chyba a text chyby si můžete nastavit sami. – Ke standardním výjimkách PL/SQL tak získáváte možnost přidat vlastní výjimky. – Číslo vlastní chyby musí být v rozsahu -20001 až -20999. IDAS2 - Přednáška V 23
24
RAISE_APPLICATION_ERROR IDAS2 - Přednáška V 24
25
RAISE_APPLICATION_ERROR IDAS2 - Přednáška V 25
Podobné prezentace
© 2024 SlidePlayer.cz Inc.
All rights reserved.