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

edytuj

Operator 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

edytuj

Operator 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)