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 Procedurální jazyk PG/SQL

Logo Matematická biologie

Procedurální jazyk PG/SQL

Procedurální jazyk databáze POSGRESQL se označuje jako PG/SQL  nebo také plpgsql a od PL/SQL databáze ORACLE se odlišuje v několika bodech. Předně databáze POSTGRESQL podporuje pouze uživatelské funkce, nikoliv procedury. Nicméně pomocí funkcí lze dosáhnou stejného efektu jako pomocí procedur v PL/SQL.

Funkce PG/SQL definujeme následovně:

CREATE FUNCTION nejaka_funkce() RETURNS NUMERIC AS $$

DECLARE

    promenna NUMERIC := 30;

BEGIN

    RAISE NOTICE 'Promenna obsahuje cislo %', promenna; 

                             -- % je ve vypisu nahrazeno obsahem promenne

    RETURN promenna;

END;

$$ LANGUAGE plpgsql;

 Na příkladu lze vidět některé odlišnosti (červeně) v syntaxi oproti PL/SQL. Celý procedurální kód je uzavřen mezi symboly "$$", na konci je pak navíc specifikace použitého jazyka za klíčovým slovem LANGUAGE. Deklarace proměnných je uvozena klíčovým slovem DECLARE. Příkaz RAISE, který v ORACLE slouží výhradně pro vyvolání výjimky, se v POSTGRESQL využívá i k zobrazení zpráv.   RAISE NOTICE pouze zobrazí specifikovaný text, zatímco RAISE EXCEPTION vyvolá výjimku.

Operátor přiřazení (:=) je shodná s PL/SQL, stejně jako podmínkové konstrukce IF-ELSIF-ELSE. Podporovány jsou taktéž smyčky LOOP a WHILE. Smyčka FOR pro procházení řádků výsledku SQL dotazu má drobné odlišnosti od verze v PL/SQL:

CREATE OR REPLACE FUNCTION smycka() RETURNS integer AS $$

DECLARE

    k RECORD;

BEGIN

    FOR k IN SELECT * FROM patients LOOP

                 RAISE NOTICE 'pacient %', k.patient_id;  

    END LOOP;

    RETURN 1;

END;

$$ LANGUAGE plpgsql;  

Předně proměnná použitá jako vektor musí být deklarována jako každá jiná proměnná, datový typ pro kurzor je RECORD.  Druhý drobnější rozdíl je, že SQL dotaz ve FOR smyčce není třeba uzavírat do závorek.

Uživatelskou funkci voláme jako standardní funkce pomocí SQL dotazů. Pokud chceme jen vynutit její spuštění, použijeme konstrukci:

SELECT nazev_funkce() FROM GENERATE_SERIES(1,1)

nebo zkrácenou variantu

SELECT nazev_funkce()

Tento SQL dotaz zajistí právě jedno spuštění uživatelské funkce.

Co se týká výjimek, je způsob jejich zachytávání shodný s PL/SQL, liší se pouze seznam možných typů systémových výjimek.  


 

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