Documentazione di PostgreSQL 9.0 > Il linguaggio SQL > Funzioni e Operatori > Funzioni che ritornano insiemi
PrecedenteConfronti di array e righeFunzioni per informazioni di sistemaSuccessivo

9.22. Funzioni che ritornano insiemi

Questa sezione descrive le funzioni che possono restituire più di una riga. Attualmente le sole funzioni in questa classe sono le funzioni di generazione serie, come specificato dettagliatamente in Tabella 9.45, «Funzioni di generazione serie» e Tabella 9.46, «Sottoscript che generano funzioni».

Tabella 9.45. Funzioni di generazione serie

FunzioneTipo argomentoTipo restituitoDescrizione
generate_series(start, , stop)int o bigintsetof int o setof bigint (stesso tipo dell'argomento) Genera una serie di valori , da start a stop con dimensione del passo di uno
generate_series(start, , stop, , step)int o bigintsetof int o setof bigint (stesso tipo dell'argomento) Genera una serie di valori, da start a stop con dimensione del passo step
generate_series(start, , stop, , step, interval)timestamp o timestamp with time zonesetof timestamp o setof timestamp with time zone (tesso tipo dell'argomento Genera una serie di valori, da start a stop con dimensione del passo step

Quando step è positivo, vengono restituite zero righe se start è maggiore di stop. Al contrario, quando step è negativo, zero righe sono restituite se start è minore di stop. Vengono restituite zero righe anche per input NULL. Un valore zero per step è considerato errore. Seguono alcuni esempi:

SELECT * FROM generate_series(2,4);
 generate_series
-----------------
               2
               3
               4
(3 rows)

SELECT * FROM generate_series(5,1,-2);
 generate_series
-----------------
               5
               3
               1
(3 rows)

SELECT * FROM generate_series(4,3);
 generate_series
-----------------
(0 rows)

-- questo esempio fa uso dell'operatore data-più-intero 
SELECT current_date + s.a AS dates FROM generate_series(0,14,7) AS s(a);
   dates
------------
 2004-02-05
 2004-02-12
 2004-02-19
(3 rows)

SELECT * FROM generate_series('2008-03-01 00:00'::timestamp,
                              '2008-03-04 12:00', '10 hours');
   generate_series   
---------------------
 2008-03-01 00:00:00
 2008-03-01 10:00:00
 2008-03-01 20:00:00
 2008-03-02 06:00:00
 2008-03-02 16:00:00
 2008-03-03 02:00:00
 2008-03-03 12:00:00
 2008-03-03 22:00:00
 2008-03-04 08:00:00
(9 rows)

Tabella 9.46. Sottoscript che generano funzioni

FunzioneTipo di ritornoDescrizione
generate_subscripts(torray anyarray, , dim int)setof int Genera una serie comprendente i sottoscript dell'array fornito.
generate_subscripts(torray anyarray, , dim int, , reverse boolean)setof int Genera una serie contenente i sottoscript dell'array fornito. Quando reverse è true, la serie viene restituita con ordine invertito.

generate_subscripts è una funzione utile che genera l'insieme di sottoscript validi per la dimensione specificata dell'array fornito. Per gli array che non hanno la dimensione richiesta o per array NULL, sono ritornate zero righe (ma per array NULL sono ritornati i sottoscript validi per gli elementi). Seguono alcuni esempi:

-- uso di base
SELECT generate_subscripts('{NULL,1,NULL,2}'::int[], 1) AS s;
 s 
---
 1
 2
 3
 4
(4 rows)

-- presenting an array, the subscript and the subscripted
-- value requires a subquery 
SELECT * FROM arrays;
         a          
--------------------
 {-1,-2}
 {100,200,300}
(2 rows)

SELECT a AS array, s AS subscript, a[s] AS value
FROM (SELECT generate_subscripts(a, 1) AS s, a FROM arrays) foo;
     array     | subscript | value
---------------+-----------+-------
 {-1,-2}       |         1 |    -1
 {-1,-2}       |         2 |    -2
 {100,200,300} |         1 |   100
 {100,200,300} |         2 |   200
 {100,200,300} |         3 |   300
(5 rows)

-- unnest a 2D array  
CREATE OR REPLACE FUNCTION unnest2(anyarray)
RETURNS SETOF anyelement AS $$
select $1[i][j] 
   from generate_subscripts($1,1) g1(i),
        generate_subscripts($1,2) g2(j);
$$ LANGUAGE sql IMMUTABLE;
CREATE FUNCTION
postgres=# SELECT * FROM unnest2(ARRAY[[1,2],[3,4]]);
 unnest2 
---------
       1
       2
       3
       4
(4 rows)

Documentazione di PostgreSQL 9.0 > Il linguaggio SQL > Funzioni e Operatori > Funzioni che ritornano insiemi
PrecedenteConfronti di array e righeFunzioni per informazioni di sistemaSuccessivo