.NET

Psaní PL/pgSQL funkcí

Úvod

PostgreSQL je víc než jen RDBMS engine. Je to vyvíjející se platforma. Nabízí velmi výkonný a flexibilní programovací jazyk zvaný PL/pgSQL. Pomocí tohoto jazyka si můžete psát vlastní uživatelsky definované funkce a dosáhnout tak úrovně abstrakce a procedurálních výpočtů, které by se v čistém SQL dosahovaly obtížně (a někdy by se bez přepínání kontextu do aplikace nedaly dosáhnout vůbec).

Psaní funkcí

Ve schématu public klikněte pravým tlačítkem na uzel Functions a zvolte Create Function. Otevře se vnitřní záložka SQL Query, která už obsahuje SQL šablonu pomáhající vytvořit vaši první PL/pgSQL funkci.

Ohledně psaní uživatelsky definovaných funkcí se můžete podívat do dokumentace PostgreSQL. Stačí kliknout pravým tlačítkem na uzel Functions a zvolit Doc: Functions — příslušná stránka dokumentace PostgreSQL se otevře ve vašem webovém prohlížeči (v desktopové aplikaci v systémovém výchozím prohlížeči, při běhu jako prohlížečový OmniDB Server jako nová karta).

Nyní tuto SQL šablonu celou nahraďte následujícím zdrojovým kódem:

CREATE OR REPLACE FUNCTION public.fnc_count_vowels (p_input text)
RETURNS integer LANGUAGE plpgsql AS
$function$
DECLARE
  str text;
  ret integer;
  i   integer;
  len integer;
BEGIN
  str := upper(p_input);
  ret := 0;
  i := 1;
  len := length(p_input);
  WHILE i <= len LOOP
    IF substr(str, i, 1) in ('A', 'E', 'I', 'O', 'U') THEN
      ret := ret + 1;
    END IF;
    i := i + 1;
  END LOOP;
  RETURN ret;
END;
$function$

Tím se ve schématu public vytvoří funkce nazvaná fnc_count_vowels. Tato funkce přijímá textový argument p_input a spočítá, kolik samohlásek tento řetězec obsahuje. Poté tento počet vrátí.

Funkci vytvoříte spuštěním příkazu ve vnitřní záložce SQL Query. Pokud se to podaří, funkce se objeví pod stromovým uzlem Functions (můžete jej obnovit kliknutím pravým tlačítkem a volbou Refresh). Rozbalením uzlu funkce navíc uvidíte její návratový typ a argument.

Nyní tuto novou funkci poprvé spusťme. Otevřete jednoduchou vnitřní záložku SQL Query a spusťte následující SQL dotaz:

SELECT public.fnc_count_vowels('The quick brown fox jumps over the lazy dog.')

Všimněte si, že dotaz vrací jedinou hodnotu obsahující počet samohlásek v textu.

Kliknutím pravým tlačítkem na uzel funkce uvidíte, že jsou k dispozici akce pro její úpravu, výběr a odstranění. Jak jste asi tušili, každá akce otevře vnitřní záložky SQL Query s praktickými SQL šablonami.