Documentazione di PostgreSQL 9.0 > Il linguaggio SQL > Sintassi SQL > Chiamare funzioni
PrecedenteEspressioni di valoreDefinizione dei datiSuccessivo

4.3. Chiamare funzioni

PostgreSQL™ la chiamata di funzioni che hanno parametri nominati usando sia notazione posizionale che nominale. La notazione nominale è utile sopratutto per funzioni che hanno un elevato numero di parametri, dato che rende l'associazione tra i parametri e gli effettivi argomenti più esplicita e attendibile. Nella notazione posizionale, una chiamata di funzione viene scritta con i suoi valori di argomento nello stesso ordine di come sono definiti nella dichiarazione di funzione. Nella notazione nominale, gli argomenti corrispondono ai parametri di funzione per nome e possono essere scritti in qualsiasi ordine.

Nelle due notazioni, i parametri che hanno valori predefiniti forniti nella dichiarazione di funzione non hanno bisogno di essere scritti per niente. Ma questo è particolarmente utile nella notazione nominale, dato che qualsiasi combinazione di parametri può essere omessa; mentre nella notazione posizionale i parametri possono essere omessi sono da destra a sinistra.

PostgreSQL™ supporta anche la notazione mista, che combina le notazioni posizionale e nominale. In questo caso, i parametri posizionali sono scritti prima e i parametri nominali appaiono dopo.

Gli esempi seguenti illustreranno l'utilizzo di tutte e tre le notazioni, usando la seguente definizione di funzione:

CREATE FUNCTION concat_lower_or_upper(a text, b text, uppercase boolean DEFAULT false)
RETURNS text
AS
$$
 SELECT CASE
        WHEN $3 THEN UPPER($1 || ' ' || $2)
        ELSE LOWER($1 || ' ' || $2)
        END;
$$
LANGUAGE SQL IMMUTABLE STRICT;

La funzione concat_lower_or_upper ha due parametri obbligatori, a and b. In più, c'è un parametro opzionale uppercase che in modo predefinito è false. Gli input a e b saranno concatenati, e forzati a maiuscolo o a minuscolo in dipendenza del parametro uppercase. I rimanenti dettagli di questa funzione non sono importanti qui (si veda Capitolo 35, Estendere SQL per maggiori informazioni).

4.3.1. Usare la notazione posizionale

La notazione posizionale è il meccanismo tradizionale per il passaggio di argomenti a funzioni in PostgreSQL™. Un esempio è:

SELECT concat_lower_or_upper('Hello', 'World', true);
 concat_lower_or_upper 
-----------------------
 HELLO WORLD
(1 row)

Tutti gli argomenti sono specificati in ordine. Il risultato è maiuscolo dato che uppercase è impostata a true. Un altro esempio è:

SELECT concat_lower_or_upper('Hello', 'World');
 concat_lower_or_upper 
-----------------------
 hello world
(1 row)

Qui, il parametro uppercase viene omesso, e così riceve il suo valore predefinito come false, generando un output minuscolo. In notazione posizionale, gli argomenti possono essere omessi da destra a sinistra dal momento che hanno valori predefiniti.

4.3.2. Usare la notazione nominale

Nella notazione nominale, ogni nome di argomento viene specificato usando := per separarlo dall'espressione dell'argomento. Per esempio:

SELECT concat_lower_or_upper(a := 'Hello', b := 'World');
 concat_lower_or_upper 
-----------------------
 hello world
(1 row)

Di nuovo, l'argomento uppercase è stato omesso e per questo viene impostato a false implicitamente. Un vantaggio di usare la notazione nominale è che gli argomento possono essere specificati in qualsiasi ordine, per esempio:

SELECT concat_lower_or_upper(a := 'Hello', b := 'World', uppercase := true);
 concat_lower_or_upper 
-----------------------
 HELLO WORLD
(1 row)

SELECT concat_lower_or_upper(a := 'Hello', uppercase := true, b := 'World');
 concat_lower_or_upper 
-----------------------
 HELLO WORLD
(1 row)

4.3.3. Usare la notazione mista

La notazione mista combina la notazione posizionale e quella nominale. Comunque, come già detto, argomenti nominali non possono precedere argomenti posizionali. Per esempio:

SELECT concat_lower_or_upper('Hello', 'World', uppercase := true);
 concat_lower_or_upper 
-----------------------
 HELLO WORLD
(1 row)

Nella query sopra, gli argomenti a e b sono specificati posizionalmente, mentre uppercase è specificato dal nome. In questo esempio, questo aggiunge poco ad eccezione di documentazione. Con una funzione più complessa avente numerodi parametri che hanno valori predefiniti, la notazione nominale o posizionale può far risparmiare scritture e ridurre le possibilità di errori.

Documentazione di PostgreSQL 9.0 > Il linguaggio SQL > Sintassi SQL > Chiamare funzioni
PrecedenteEspressioni di valoreDefinizione dei datiSuccessivo