lunedì 11 maggio 2009

Creare un operatore

Una delle maggiori differenze fra PostgreSQL e gli altri DBMS è il suo uso profondo del catalogo di sistema. In PostgreSQL infatti ogni cosa è definita nel catalogo, e quindi non solo le tabelle e le funzioni, ma anche gli operatori e gli indici trovano spazio di personalizzazione alterando il catalogo di sistema.
Questo consente, ad esempio, di creare facilmente degli operatori nuovi per agire sui dati.

Come esempio, si supponga di voler creare un operatore -% che effettua uno sconto percentuale su un valore numerico. Il primo passo da fare è quello di definire una funzione (stored procedure) che operi sui dati corretti e produca il risultato. Siccome si vuole arrivare a scrivere una cosa del tipo:

select a -% b;


l'operatore avrà due operandi, interi, e di conseguenza anche la funzione avrà gli stessi operandi (parametri). Per semplicità si supponga che il valore risultante sia intero. E' quindi possibile definire la funzione come segue:

CREATE OR REPLACE FUNCTION sconto( prezzo_lordo integer, sconto integer ) RETURNS INTEGER
AS
$BODY$
DECLARE

BEGIN
IF sconto > 0 THEN
RETURN (prezzo_lordo - (prezzo_lordo * sconto / 100) );
ELSE
RETURN prezzo_lordo;
END IF;

END;
$BODY$
LANGUAGE 'plpgsql' VOLATILE;

A questo punto si puo' inserire il nuovo operatore, specificando il suo nome (-%), il tipo dei suoi operandi e la funzione da usare per il calcolo:

CREATE OPERATOR -% (
PROCEDURE = sconto
, LEFTARG = integer
, RIGHTARG = integer
)

E da ultimo si puo' verificare come l'operatore appena creato lavori correttamente:

select 100 -% 10 as prezzo_netto;

che riporterà in uscita 90, ovvero l'applicazione dello sconto.

Nessun commento: