Příkazy CALL a RETURN

Z PostgreSQL
Skočit na navigaci Skočit na vyhledávání

Příkaz CALL

Tento příkaz slouží k aktivaci libovolné funkce. Na rozdíl od standardu PostgreSQL nepodporuje předávání hodnot odkazem. Tento příkaz je analogický příkazu PERFORM v jazyce PL/pgSQL.

Syntaxe

  CALL '(' seznam hodnot oddelenych carkou ')'

Příkaz RETURN

Příkaz RETURN ukončuje provádění funkce. Výsledek výrazu v příkazu je zároveň hodnotou, která je vrácena funkcí. Výraz v příkazu RETURN nemusíme uvádět jestliže se jedná o funkci s OUT argumenty, nebo se jedná o void funkci. PL/pgPSM podporuje tzv. funkce generující tabulky (set returned funkce).

Syntaxe

  RETURN [vyraz]

Pokud je funkce vrací tabulku, musíme použít tzv. tabulkový výraz, kdy výraz v příkazu RETURN je SQL příkaz, jehož výsledkem je tabulka. Jelikož se výsledná tabulka přímo předává jako výstup z funkce, používá se příkaz SELECT bez klauzule INTO. Tabulkový výraz se smí objevit pouze jako argument příkazu RETURN.

CREATE OR REPLACE FUNCTION tab(p int)
RETURNS SETOF Foo AS
$$
  BEGIN
    -- urcity vypocet
    IF p < 0 THEN SET p = 0; END IF;
    IF p > 20 THEN SET p = 20; END IF;
    -- pouziti tabulkoveho vyrazu
    RETURN TABLE(
      SELECT *
         FROM Foo
        WHERE Foo.a < tab.p;
      );  
  END;
$$ LANGUAGE plpgpsm;