Procedury składowane w PostgreSQL/Operatory
Nowy operator wprowadza polecenie:
CREATE OPERATOR nazwa ( PROCEDURE = procedura [, LEFTARG = typ_lewostronny ] [, RIGHTARG = typ_prawostronny ] );
Operator może być dwu- lub jednoargumentowy. Dla dwuargumentowych wymagane jest podanie typu_lewostronnego i typu_prawostronnego, dla jednoargumentowych jednego z nich.
Procedura musi przyjmować jeden albo dwa argumenty zgodnie z parametrami LEFTARG i RIGHTARG, natomiast może zwracać dowolny typ.
UWAGA: Parser zawsze zamienia operator != na <>, przez co niemożliwe jest, aby te dwa operatory działały odmiennie.
Przykład 1
edytujOperator jednoargumentowy ##:
CREATE OR REPLACE FUNCTION kwadrat(numeric) RETURNS numeric AS $$
BEGIN
RETURN $1 * $1;
END;
$$ LANGUAGE 'plpgsql' IMMUTABLE;
CREATE OPERATOR ## (
PROCEDURE = kwadrat,
RIGHTARG = numeric
);
SELECT ## 5.0; ?column? ---------- 25.00 (1 row) SELECT ## 1.7; ?column? ---------- 2.89 (1 row)
Przykład 2
edytujOperator dwuargumentowy &**, który działa na typach różnych argumentów.
CREATE OR REPLACE FUNCTION powtorz(text, integer) RETURNS text AS $$
DECLARE
n integer := $2;
res text = '';
BEGIN
WHILE n > 0 LOOP
res := res || $1;
n := n - 1;
END LOOP;
RETURN res;
END;
$$ LANGUAGE 'plpgsql' IMMUTABLE;
CREATE OPERATOR &** (
PROCEDURE = powtorz,
LEFTARG = text,
RIGHTARG = integer
);
Operator zostanie użyty do utworzenia kolejnego wersu przeboju.
SELECT 'La ' &** 3 &** 2; ?column? -------------------- La La La La La La (1 row)