««« | »»»
PostgreSQL 8.4: argomenti delle funzioni
Con la versione 8.4 vengono introdotte due novità di grande utilità: la possibilità di avere un numero variabile di argomenti e la possibilità di specificare dei valori di default.
Non mi dilungo sul funzionamento, piuttosto ovvio, rimandando alla documentazione. Vorrei invece spiegare il motivo del mio interesse, in particolare per le funzioni variadic.
Funzioni variadic
Con queste funzioni diventa ora semplicissimo definirne una generica di inserimento, utilizzabile senza che sia quasi necessario “massaggiare” i dati che arrivano da un POST.
Basta creare una funzione che abbia come argomento VARIADIC text[]. L’array avrà una struttura del tipo: nome tabella, chiave, valore, … Usando il proprio linguaggio di fiducia è facile poi costruire lo statement SQL adatto.
Funzioni con default
La possibilità di specificare dei valori di default può essere molto utile, soprattutto con le funzioni SQL e non PL/pgSQL, dato che non c’è la possibilità di dichiarare variabili. Tuttavia, più che segnalare i possibili usi mi limito a far presente un’ambiguità.
PostgreSQL (esattamente come Java) supporta l’overloading degli argomenti: due funzioni con lo stesso nome sono disambiguate in base agli argomenti. Ora, introducendo i defaults possiamo avere situazioni come questa:
create or replace function fn (a int)
returns int as $$
select $1;
$$ language sql;
create or replace function fn (
a int, b int default 2
) returns int as $$
select $1 + $2;
$$ language sql;
Se faccio: select fn(10, 20) tutto bene, ma con:
test=# select fn(10);
ERROR: function fn(integer) is not unique
LINE 1: select fn(10);
^
HINT: Could not choose a best candidate function.
You might need to add explicit type casts.
test=#
So che è un caso limite ma è meglio tener presente la cosa.
Per proseguire
Commenti e trackback sono disabilitati.
Commenti su PostgreSQL 8.4: argomenti delle funzioni
Una risposta
PostgreSQL 8.4: parametri di default e overloading - ReFactor.it (11/11/09)
[…] fa, quando spiegavo le novità di PostgreSQL 8.4 nelle funzioni, avvertivo anche che la combinazione dei parametri di default con l’overloading degli argomenti […]