Slovník | Vyhledávání | Mapa webu
 
Základy informatiky pro biologyDatabázové systémy v biomedicíně SQL skripty, uživatelské procedury a funkce Vytváření uživatelských procedur a funkcí

Logo Matematická biologie

Vytváření uživatelských procedur a funkcí

Jak bylo řečeno, uložené procedury a funkce jsou objekty databáze stejně jako tabulky. Vytváříme je příkazem CREATE PROCEDURE, resp. CREATE FUNCTION. Syntaxe těchto příkazů je následující:

CREATE PROCEDURE jmeno_proc (parametry) IS

i NUMBER; -- deklarace proměných

BEGIN

    –tělo procedury

END;

 

CREATE FUNCTION jmeno_funkce (parametry) RETURN datovy_typ IS

i NUMBER;

BEGIN

  --tělo funkce

     RETURN vysledek;

END;

Místo příkazu CREATE můžeme použít CREATE OR REPLACE, který v případě, že procedura či funkce již existuje, provede její nahrazení. Při vytváření funkce na rozdíl od procedury musíme specifikovat datový typ výsledku funkce. Výsledek funkce spočítáme v těle funkce v libovolné proměnné, na konci funkce označíme zvolenou proměnnou jako proměnnou obsahující finální výsledek pomocí příkazu RETURN. Tímto příkazem vykonávání funkce končí. Parametry procedur a funkcí jsou proměnné, pomocí kterých předáváme proceduře či funkci vstupní hodnoty při jejím volání. U procedur mohou parametry sloužit i k předávání výsledků (OUTPUT parametry). Parametrů může být 0 až N, stejně jako interní proměnné mají svůj název a datový typ. Definují se za názvem procedury a funkce a vzájemně jsou odděleny čárkou.  

Jako příklad funkce můžeme uvést uživatelskou funkci, která ze dvou datumů spočíta věk, tedy rozdíl datumů v celých rocích.

CREATE OR REPLACE FUNCTION age (datum1 DATE, datum2 DATE) RETURN NUMBER

IS

roku NUMBER;

BEGIN

    roku := ABS(TRUNC(MONTHS_BETWEEN(datum1, datum2) / 12));

    RETURN roku;

END;

Na vstupní hodnoty použijeme ORACLE funkci MONTHS_BETWEEN, výsledek podělíme dvanácti, odřízneme desetinnou část a funkcí ABS zajistíme, že výsledek je kladné číslo pro případ, že předáme funkci datumy v opačném pořadí.

Tuto funkci můžeme pak následně použít jako jakoukoliv jinou funkci v SQL dotazech:

SELECT age(date_of_birth, SYSDATE) vek FROM patients

Jako uloženou proceduru si můžeme definovat kód, který provádí hromadné mazání (sérii DELETE příkazů) tabulek v našem schématu.

CREATE PROCEDURE uklid () IS

BEGIN

     DELETE FROM tab1;

     DELETE FROM tab2;

     DELETE FROM tab3;

 END;

Abychom spustili uloženou proceduru z databázového klienta, musíme její volání vymezit jako PL/SQL blok pomocí BEGIN a END. Spuštění procedury uklid bude vypadat takto:

BEGIN

     uklid();

END;

 
vytvořil Institut biostatistiky a analýz Lékařské fakulty Masarykovy univerzity