Procedury składowane w PostgreSQL/Procedury generyczne
Funkcja jest generyczna jeśli zwracany typ, bądź co najmniej jeden element na liście argumentów jest typu:
- anyelement - dowolny typ;
- anyarray - dowolna tablica;
- anynonarray - dowolny typ, za wyjątkiem tablicowego.
Podczas wykonywania funkcji sprawdzane są dynamicznie własności typu, tzn. czy operacje na nim mają sens.
Funkcje tego rodzaju są często używane w realizacji funkcji agregujących i okienkowych.
Przykład
edytujFunkcja wymienia wartości argumentów.
CREATE OR REPLACE FUNCTION generic_swap(INOUT x anyelement, INOUT y anyelement) AS $$
DECLARE
t x%TYPE;
BEGIN
t := x;
x := y;
y := t;
END;
$$ LANGUAGE 'plpgsql';
CREATE OR REPLACE FUNCTION test() RETURNS VOID AS $$
DECLARE
a integer := 1;
b integer := 2;
BEGIN
RAISE NOTICE 'a=%, b=%', a, b;
PERFORM generic_swap(a, b);
RAISE NOTICE 'a=%, b=%', a, b;
END;
$$ LANGUAGE 'plpgsql';