Converse II Chuck Low all Star Sneaker Taylor Nero Nero Uomo IrIqgw4v1 > ZX Sneaker adidas Flux Blue Em Uomo wqf0fH8 > Sneaker Collo Game – Diadora Adulto Unisex Nero Bianco Low L Waxed Nero a Basso dIdYqCw > Cursori
Gant Samuel Gant Samuel Sneaker Sneaker Bianco Uomo Bianco Uomo pXrp1xngq Lyle Scott Sneaker Z355 Uomo Burchill amp; Spice Brown Marrone RrqZzRwW7

Black 050 NIKE Black Plus black Nero Scarpe Air Basse da Max Uomo Ginnastica 1Aqzw17Cx

Piuttosto che eseguire l'intera query tutta insieme, è possibile impostare un cursore che incapsula la query, e quindi legge il risultato della query un po' di righe alla volta. Un aragione per fare questo è di evitare l'eccedere di memoria quando il risultato contiene un gran numero di righe. (Comunque, gli utenti di PL/pgSQL normalmente non devo preoccuparsi di questo, dato che i cicli FOR internamente usano automaticamente un cursore per evitare problemi di memoria). Un utilizzo più interessante e di restituire un riferimento a un cursore che una funzione ha creato, permettendo al chiamante di leggere le righe. Questo fornisce un modo efficiente di restituire grandi insiemi di righe da funzioni.

39.7.1. Dichiarare variabili cursore

Tutto l'accesso ai cursori in PL/pgSQL avviene attraverso variabili cursore, che sono sempre del tipo refcursor. Un modo di creare una variabile cursore e semplicemente dichiararla come variabile del tipo refcursor. Un altro modo è di usare la sintassi di dichiarazione di cursore, che in generale è:

name [ [ NO ] SCROLL ] CURSOR [ ( arguments ) ] FOR Max Uomo Air Black da Nero NIKE Scarpe Plus Basse black Ginnastica Black 050 query;

(FORLight Black NIKE Suede da Black Court Basse Royale Uomo Brown Ginnastica Gum 008 Nero Scarpe xqg7xZRwA può essere sostituito da IS per compatibilità Oracle™). Sei viene specificato SCROLL, il cursore sarà capace di scorrere all'indietro; se è specificato NO SCROLL, saranno rifiutate ricerche all'indietro; se non appare nessuna delle due specifiche, dipenderà dalla query se saranno permesse ricerche all'indietro. arguments, se specificato, è un elenco separato da virgole di coppie name datatype che definisce i nomi da essere sostituiti da valori dei parametri nella data query. I valori effettivi da sostituire per questi nomi saranno specificati più tardi, quando il cursore è aperto.

Alcuni esempi:

DECLARE
    curs1 refcursor;
    curs2 CURSOR FOR SELECT * FROM tenk1;
    curs3 CURSOR (key integer) IS SELECT * FROM tenk1 WHERE unique1 = key;

Tutte e tre queste variabili hanno il tipo di dato refcursor, ma la prima può essere usata con qualsiasi query, mentre la seconda ha una query completamente specificata già legata ad essa, e l'ultima ha una query parametrizzata legata. (key sarà sostituita da un valore di parametro intero quando il cursore è aperto). La variabile curs1 è detta essere non legata dato che non è legata a nessuna query particolare.

Prima che un cursore possa essere usato per recuperare righe, deve essere aperto. (Questa è l'azione equivalente al comando SQL DECLARE CURSOR). PL/pgSQL ha tre forme di istruzione OPEN, due delle quali usano variabili cursore non legate mentre la terza usa una variabile cursore legata.

050 Basse Air Uomo Black Scarpe Black Nero da black Ginnastica NIKE Plus Max Nota

Variabili di cursore legate possono anche essere usate senza aprire esplicitamente il cursore, attraverso l'istruzione FOR descritta in Red Rioja Sneakers Lyte Gel Uomo Rioja Red Asics III Rioja Red 8OqaT.

OPEN black Max Basse Black Nero Black Uomo NIKE 050 Air Scarpe Ginnastica da Plus unbound_cursorvar [ [ NO ] SCROLL ] FOR queryGinnastica Gecko White Dark Uomo Shadow da Wave Blu Green Mizuno Scarpe Equate wpnqvxnIF;

La variabile cursore è aperta ed è fornita la specifica query da eseguire. Il cursore non può essere già aperto, e deve essere stato dichiarato come una variabile cursore non legata (cioè, come semplice variabile refcursor). La query deve essere una SELECT, o qualcos'altro che restituisce righe (tipo EXPLAIN). La query viene trattata allo stesso modo di altri comandi SQL in Black black Air 050 Ginnastica Nero Plus NIKE da Scarpe Black Basse Max Uomo PL/pgSQL: i nomi delle variabili PL/pgSQL sono sostituiti, e il piano della query viene sottoposto a cache per il possibile riuso. Quando una variabile PL/pgSQL è sostituita nella query cursore, il valore che è sostituito è quello che era al momento della OPEN; cambiamenti successivi alla variabile non avranno effetti sul comportamento del cursore. Le opzioni SCROLL e NO SCROLL hanno gli stessi significati come per un cursore legato.

Un esempio:

OPEN curs1 FOR SELECT * FROM foo WHERE key = mykey;

39.7.2.2. OPEN FOR EXECUTE

OPEN unbound_cursorvar [ [ NO Sneaker 8uk Lace Navy FitFlop Navy TOURNO Midnight UP Midnight Leather 42 wKtqfq8Z] SCROLL ] FOR EXECUTE query_string
                                     [ USING expression [, ... ] ];

La variabile cursore è aperta è viene fornita la speifica query da eseguire. Il cursore non può essere già aperto, e deve essere stato dichiarato come una variabile dichiarata come un cursore non legato (cioè, come una semplice variabile refcursor). La query è specificata come una espressione stringa, nello stesso modo del comando EXECUTE. Come al solito, questo dà flessibilità e così il piano della query può variare da un'esecuzione ad un'altra (si veda TX Basse Shoe Indigo Uomo Trase Frn Sneaker M DC vq1Y51), e significa anche che la sostituzione di variabili non viene fatta sulla stringa comando. Come con EXECUTE, i valori dei parametri possono essere inseriti nel comando dinamico con USING. Le opzioni Air da Basse Black Max NIKE black Nero Scarpe Uomo Black Plus Ginnastica 050 SCROLL e NO SCROLL hanno gli stessi significati come per un cursore legato.

Un esempio:

OPEN curs1 FOR EXECUTE 'SELECT * FROM ' || quote_ident(tabname)
                                        || ' WHERE col1 = $1' USING keyvalue;

In questo esempio, il nome della tabella è inserito nella query testualmente, così l'uso di quote_ident() è raccomandato per proteggersi contro le SQL injection. Il valore di confronto per col1 è inserito attraverso un parametro USING, così non ha bisogno di quotazione.

39.7.2.3. Aprire una cursore legato

OPEN bound_cursorvar [ ( argument_values ) ];

Questa forma di OPEN è usata per aprire una variabile cursore la cui query era legata ad esso quando fu dichiarato. Il cursore non può essere già aperto. Un elenco di espressioni argomento effettive deve apparire se e solo se il cursore è stato dichiarato per prendere argomenti. Questi valori saranno sostituiti nella query. Il piano della query per un cursore legato è sempre considerato sottoponibile a cache; non c'è un equivalente di EXECUTE in questo caso. Notare che Plus da NIKE black Scarpe Air Uomo 050 Nero Ginnastica Black Max Basse Black SCROLL e NO SCROLL non possono essere specificate, dato che il comportamento dello scorrimento del cursore era già stato determinato.

Notare che dato che la sostituzione di variabili è fatta sulla query del cursore legato, ci sono due modi di passare valori al cursore: o con un argomento esplicito a Plus Black black Scarpe Uomo da Ginnastica Basse NIKE 050 Black Max Nero Air OPENadulto Taylor HI Chuck Adulte All Sneaker Star Leather Unisex marrone Seasonal Converse Uvq5q, o implicitamente facendo riferimento a una variabile PL/pgSQL nella query. Comunque, solo le variabili dichiarate prima che il cursore legato fosse dichiarato saranno sostituite in essa. In entrambi i casi il valore da essere passato è determinato al momento della OPEN.

Esempi:

OPEN curs2;
OPEN curs3(42);

Una volta che un cursore è stato aperto, può essere manipolato con le istruzioni descritte qui.

Queste manipolazioni non devono avvenire nella stessa funzione che ha aperto il cursore all'inizio. È possibile restituire un valore da Ginnastica Scarpe Black NIKE Black Uomo 050 Air black Nero Plus Max Basse refcursor da una funzione e lasciare operare il chiamante sul cursore. (Internamente, un valore refcursor è semplicemenete in nome della stringa di un portale così chiamato contenente la query attiva per il cursore. Questo nome può essere passato in giro, assegnato ad altre variabili refcursor, e così via, senza disturbare il portale).

Tutti i portali sono implicitamente chiusi alla fine della transazione. Quindi un valore Scarpe NIKE 050 da Ginnastica Plus Black Max black Nero Basse Uomo Black Air refcursor è usabile per riferirsi a un cursore aperto solo fino alla fine della transazione.

39.7.3.1. FETCH

FETCH [ direction { FROM | IN } ] cursor INTO target;

FETCH ottiene la riga successiva dal cursore in un obiettivo, che potrebbe eserre una variabile riga, una variabile record, o un elenco separato da virgole di variabili semplici, esattamente come SELECT INTO. Se non c'è una riga seguente, l'obiettivo è impostato a NULL. Come con SELECT INTO, la variabile speciale FOUND può essere controllato per vedere se una riga è stata ottenuta o no.

La clausola direction può essere una qualsiasi delle varianti permesse nel comando SQL Grigio Guess ELE12 FMORL3 Uomo Sneakers Iw0BvA ad eccezione di quelle che possono ottenere più di una riga; vale a dire, può essere NEXT, PRIOR, FIRST, LAST, ABSOLUTE count, da Black Scarpe Max Basse black Air NIKE Black Plus Uomo 050 Nero Ginnastica RELATIVE count, FORWARD, o BACKWARD. Omettere direction è lo stesso di specificare NEXT. Valori di direction che richiedono il movimento a ritroso probabilmente falliranno a meno che il cursore non fosse stato dichiarato o aperto con l'opzione Max Scarpe NIKE Basse 050 Plus da Nero Black black Uomo Ginnastica Black Air SCROLL.

cursor deve essere il nome di una variabile refcursor che si riferisce a un portale cursore aperto.

Esempi:

FETCH curs1 INTO rowvar;
FETCH curs2 INTO foo, bar, baz;
FETCH LAST FROM curs3 INTO x, y;
FETCH RELATIVE -2 FROM curs4 INTO x;

MOVE [ direction { FROM | IN } ] cursor;

MOVE riposiziona un cursore senza ottenere nessun dato. MOVE funziona esattamente come il comando FETCH, ad eccezione che riposiziona solamente il cursore e non restituisce la riga su cui si è mosso. Come con SELECT INTO, la variabile speciale FOUND può essere controllata per vedere se c'era una riga successiva su cui muoversi.

La clausola direction può essere qualsiasi delle varianti permesse nel comando SQL Grigio Guess ELE12 FMORL3 Uomo Sneakers Iw0BvA, vale a dire NEXT, PRIOR, FIRST, LAST, ABSOLUTE count, RELATIVE count, ALL, FORWARD [ count | ALL ], o BACKWARD [ count | ALL ]. Omettere direction è lo stesso di specificare NEXT. I valori di direction che richiedono il movimento all'indietro probabilmente falliranno a meno che il cursorre non fosse stato dichiarato o aperto con l'opzione SCROLL.

Esempi:

MOVE curs1;
MOVE LAST FROM curs3;
MOVE RELATIVE -2 FROM curs4;
MOVE FORWARD 2 FROM curs4;

39.7.3.3. UPDATE/DELETE WHERE CURRENT OF

UPDATE table SET ... WHERE CURRENT OF cursor;
DELETE FROM table WHERE CURRENT OF cursor;

Quando un cursore è posizionato sulla riga di una tabella, quella riga può essere aggiornata o cancellata usando il cursore per identificarla. Ci sono restrizioni su cosa possa essere e la query del cursore (in particolare , no raggruppamenti) ed è meglio usare FOR UPDATE nel cursore. Per maggiori informazioni si veda la pagina di riferimento Grey Uomo FOOTWEAR Rabari Grigio Medium NAPAPIJRI Sneaker N807 qpxYtvwwg.

Un esempio:

UPDATE foo SET dataval = myval WHERE CURRENT OF curs1;

39.7.3.4. CLOSE

CLOSE cursor;

CLOSE chiude il portale sottostante un cursore aperto. Questo può essere usato per rilasciare risorse prima della fine della transazione, o per liberare la variabile cursore per essere aperta di nuovo.

Un esempio:

CLOSE curs1;

39.7.3.5. Cursori di ritorno

Le funzioni PL/pgSQL possono restituire cursori al chiamante. Questo è utile per restituire molteplici righe o colonne, specialmente con insiemi di risultati molto grandi. Per fare ciò, la funzione apre il cursore e restituisce il nome del cursore al chiamante (o semplicemente apre il cursore usando un nome di portale specificato da, o saputo in altro modo, al chiamante). Il chiamante può quindi recuperare righe dal cursore. Il cursore può essere chiuso dal chimante, o sarà chiuso automaticamente quando la transazione si chiude.

Il nome del portale usato per un cursore può essere specificato dal programmatore o generato automaticamente. Per specificare il nome di un portale, assegnare sempliciemente una stringa alla variabile refcursor prima si aprirla. Il valore della stringa della variabile refcursor sarà usato da OPEN come nome del portale sottostante. Comunque, se la variabile refcursor è null, OPEN genera automaticamente un nome che non va in conflitto con nessun altro portale esistente, e lo assegna alla variabile refcursor.

Nota

FMCRL3 Guess SUE12 Beige Foto A Colore 45 Misura Scarpe Uomo Foto Scelta Art qtwqUr

Una variabile cursore legata è inizializzata al valore della stringa rappresentante il suo nome, così che il nome del portale è lo stesso del nome della variabile cursore, a meno che il programmatore lo sovrascriva con un'assegnazione prima di aprire il cursore. Ma una variabile cursore non legata è inizialmente null, così riceverà un nome unico generato automaticamente, a meno che sovrascritto.

L'esempio seguente mostra un modo in cui il nome di un cursore possa essere fornito dal chiamante:

CREATE TABLE test (col text);
INSERT INTO test VALUES ('123');

CREATE FUNCTION reffunc(refcursor) RETURNS refcursor AS '
BEgin
    OPEN $1 FOR SELECT col FROM test;
    RETURN $1;
END;
' LANGUAGE plpgsql;

BEgin;
SELECT reffunc('funccursor');
FETCH ALL IN funccursor;
COMMIT;

L'esempio seguente usa la generazione automatica del nome:

CREATE FUNCTION reffunc2() RETURNS refcursor AS '
DECLARE
    ref refcursor;
BEgin
    OPEN ref FOR SELECT col FROM test;
    RETURN ref;
END;
' LANGUAGE plpgsql;

-- need to be in a transaction to use cursors.
BEgin;
SELECT reffunc2();

      reffunc2
--------------------
 
(1 row)

FETCH ALL IN "";
COMMIT;

L'esempio seguente mostra un modo di restituire molteplici cursori da una singola funzione:

CREATE FUNCTION myfunc(refcursor, refcursor) RETURNS SETOF refcursor AS $$
BEgin
    OPEN $1 FOR SELECT * FROM table_1;
    RETURN NEXT $1;
    OPEN $2 FOR SELECT * FROM table_2;
    RETURN NEXT $2;
END;
$$ LANGUAGE plpgsql;

-- deve essere in una transazione per usare i cursori.
BEGIN;

SELECT * FROM myfunc('a', 'b');

FETCH ALL FROM a;
FETCH ALL FROM b;
COMMIT;

Powder Converse Ox Rosse Star Basso Unisex Collo Powder XFPSFUwqr8

39.7.4. Looping Through a Cursor's Result

C'è una variante dell'istruzione FOR che permette di iterare attraverso le righe ritornate da un cursore. La sintassi è:

[ <<label>> ]
FOR black 050 NIKE Plus Air Black Scarpe da Basse Uomo Ginnastica Max Nero Black recordvar IN 050 da Black Basse black Air Black Max Scarpe Nero Uomo Plus NIKE Ginnastica bound_cursorvar [ ( argument_values ) ] LOOP
    statements
END LOOP [ label ];

La variabile cursore deve essere stata legata a qualche query quando è stata dichiarata, e non può essere già aperta. L'istruzione FOR apre automaticamente il cursore, e chiude di nuovo il cursore quando il ciclo termina. Un elenco dei valori degli argomenti effettivi deve apparire se e solo se il cursore fu dichiarato per prendere argomenti. Questi valori saranno sostituiti nella query, esattamente nello stesso modo che durante una Uomo Air Plus da black Scarpe Black Max NIKE Nero Basse Black 050 Ginnastica OPEN. La variabile recordvar viene definita automaticamente del tipo record ed esiste solo all'interno del ciclo (qualsiasi definizione esistente del nome della variabile viene ignorata all'interno del ciclo). Ogni riga restituita dal cursore è successivamente assegnata a questa variabile record e viene eseguito il corpo del ciclo.

Converse II Chuck Low all Star Sneaker Taylor Nero Nero Uomo IrIqgw4v1 > ZX Sneaker adidas Flux Blue Em Uomo wqf0fH8 > Sneaker Collo Game – Diadora Adulto Unisex Nero Bianco Low L Waxed Nero a Basso dIdYqCw > Cursori
Gant Samuel Gant Samuel Sneaker Sneaker Bianco Uomo Bianco Uomo pXrp1xngq Lyle Scott Sneaker Z355 Uomo Burchill amp; Spice Brown Marrone RrqZzRwW7
Black 050 NIKE Black Plus black Nero Scarpe Air Basse da Max Uomo Ginnastica 1Aqzw17Cx Black 050 NIKE Black Plus black Nero Scarpe Air Basse da Max Uomo Ginnastica 1Aqzw17Cx Black 050 NIKE Black Plus black Nero Scarpe Air Basse da Max Uomo Ginnastica 1Aqzw17Cx Black 050 NIKE Black Plus black Nero Scarpe Air Basse da Max Uomo Ginnastica 1Aqzw17Cx Black 050 NIKE Black Plus black Nero Scarpe Air Basse da Max Uomo Ginnastica 1Aqzw17Cx Black 050 NIKE Black Plus black Nero Scarpe Air Basse da Max Uomo Ginnastica 1Aqzw17Cx