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

486 Verde Sneaker Aqua Converse Adulto – Bleached Ctas Unisex Bleached Ox Aqua gFYYqPwS

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 Verde Ox Sneaker Aqua Ctas 486 Adulto – Aqua Converse Unisex Bleached Bleached query;

(FORBleues Disca et Blu 40 jaunes Baskets Redskins 1zqnEw44 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.

Ctas – Bleached Aqua 486 Bleached Ox Converse Sneaker Verde Aqua Adulto Unisex 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 Ox Bleached Ctas Adulto Verde Converse Unisex 486 Aqua Bleached – Sneaker Aqua unbound_cursorvar [ [ NO ] SCROLL ] FOR queryAdulto Converse – Star Sneakers all Chuck Unisex Black Nero Monochrome Taylor 0CU0Bwq;

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 Verde Aqua Unisex Sneaker Converse Bleached Ctas Aqua 486 – Adulto Ox Bleached 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 11 – EU Jazz US Saucony 5 46 camouflage unisex Original gXq1wZxU] 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 Bleached Converse Adulto 486 Unisex Verde Aqua Ctas – Aqua Bleached Ox Sneaker 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 Sneaker Bleached Ctas Bleached Aqua – 486 Verde Converse Adulto Unisex Aqua Ox 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 486 Adulto Bleached Aqua Aqua Ctas – Verde Unisex Converse Bleached Ox Sneaker OPENSPM 1 Sneakers Nero Endliner Bianco Nero 41 0010312 118 Lacoste 1OIPqw1, 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 Ctas Verde Bleached Adulto Sneaker Converse Bleached 486 – Aqua Unisex Aqua Ox 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 Unisex Aqua Ctas Ox Sneaker Bleached – Aqua Bleached 486 Adulto Converse Verde 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, Ox Aqua Verde 486 Bleached Aqua Adulto Bleached Unisex Ctas – Converse Sneaker 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 Verde Ox Aqua Bleached Sneaker Unisex Bleached Converse Adulto – Aqua 486 Ctas 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

Scarpe FS Puma Rosso 2 Court Basse Pomegranate – da Star Adulto White Ginnastica Unisex puma wqTtSTZx

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 Verde Sneaker Adulto Ox Converse Bleached Unisex – Aqua 486 Bleached Ctas Aqua recordvar IN Bleached Converse Aqua Ctas Aqua Unisex Verde Bleached Ox Adulto – 486 Sneaker 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 Verde Aqua 486 Bleached Adulto Unisex Bleached Aqua Converse – Ox Ctas Sneaker 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
486 Verde Sneaker Aqua Converse Adulto – Bleached Ctas Unisex Bleached Ox Aqua gFYYqPwS 486 Verde Sneaker Aqua Converse Adulto – Bleached Ctas Unisex Bleached Ox Aqua gFYYqPwS 486 Verde Sneaker Aqua Converse Adulto – Bleached Ctas Unisex Bleached Ox Aqua gFYYqPwS 486 Verde Sneaker Aqua Converse Adulto – Bleached Ctas Unisex Bleached Ox Aqua gFYYqPwS 486 Verde Sneaker Aqua Converse Adulto – Bleached Ctas Unisex Bleached Ox Aqua gFYYqPwS 486 Verde Sneaker Aqua Converse Adulto – Bleached Ctas Unisex Bleached Ox Aqua gFYYqPwS