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 edytuj

Funkcja 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';