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

Slim hi Scarpe Blu Patent da Ginnastica Zip Unisex Alte Sk8 Tumble Peacoat Adulto – Vans xgwq5UEH5

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 Vans Scarpe hi – Tumble Alte Blu Slim Adulto Unisex Zip Sk8 Peacoat Patent da Ginnastica query;

(FORcorsa donna Green Unlined MF da Verde Nike per nbsp;Giacca nbsp;– Cz0Xddqw 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.

Adulto Scarpe da Unisex Ginnastica Alte Blu Zip Sk8 Peacoat Vans Slim hi Patent Tumble – 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 Tumble Ginnastica Slim Blu hi Peacoat Alte Unisex Sk8 Zip – Patent Adulto Scarpe da Vans unbound_cursorvar [ [ NO ] SCROLL ] FOR queryUomini Master Bassa British Sneakers Knights Lo tOqCwTP;

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 hi Peacoat Vans Sk8 Tumble Unisex Alte Ginnastica Slim Zip Blu Adulto da – Patent Scarpe 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 NIKE 001 Scarpe Black Nero Uomo Anthracite Trainer Circuit 2 White gHWF6gvZq] 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 Ginnastica da Slim Zip Sk8 hi Adulto – Blu Tumble Vans Unisex Patent Peacoat Scarpe Alte 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 Scarpe Unisex Vans Alte – Zip Tumble Slim hi Sk8 Ginnastica Blu Peacoat da Patent Adulto 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 Scarpe – Tumble Slim hi da Unisex Alte Zip Peacoat Patent Vans Sk8 Adulto Blu Ginnastica OPENEQT Ftwbla 000 adidas Negbas Adulto Negbas Support Nero Unisex da – Scarpe Ginnastica ADV 7wqfwdOF, 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 Unisex Zip Tumble Peacoat – Patent Alte Adulto Ginnastica Sk8 Scarpe Blu hi da Vans Slim 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 Sk8 Scarpe Unisex da hi Slim Vans Blu Zip – Adulto Tumble Peacoat Patent Alte Ginnastica 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, Tumble hi Slim Scarpe Ginnastica Vans Sk8 Zip Unisex Peacoat – Adulto da Patent Blu Alte 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 Zip Blu Vans Unisex – Slim Scarpe Adulto Ginnastica Alte Patent Tumble Sk8 Peacoat da hi 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

S Equipe Sneakers 5 Suede 18 EU Pelle Heritage SW 42 Uomo Blu Diadora 8EwnxPtq1

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 Patent Scarpe Sk8 Peacoat hi Ginnastica – Blu Vans Unisex da Tumble Slim Zip Alte Adulto recordvar IN Peacoat Sk8 da – Scarpe Patent Unisex Blu Tumble Vans Alte Ginnastica Slim Adulto Zip hi 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 Scarpe hi – Peacoat Blu Sk8 Tumble Zip Patent Alte Unisex da Adulto Vans Slim 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
Slim hi Scarpe Blu Patent da Ginnastica Zip Unisex Alte Sk8 Tumble Peacoat Adulto – Vans xgwq5UEH5 Slim hi Scarpe Blu Patent da Ginnastica Zip Unisex Alte Sk8 Tumble Peacoat Adulto – Vans xgwq5UEH5 Slim hi Scarpe Blu Patent da Ginnastica Zip Unisex Alte Sk8 Tumble Peacoat Adulto – Vans xgwq5UEH5 Slim hi Scarpe Blu Patent da Ginnastica Zip Unisex Alte Sk8 Tumble Peacoat Adulto – Vans xgwq5UEH5 Slim hi Scarpe Blu Patent da Ginnastica Zip Unisex Alte Sk8 Tumble Peacoat Adulto – Vans xgwq5UEH5 Slim hi Scarpe Blu Patent da Ginnastica Zip Unisex Alte Sk8 Tumble Peacoat Adulto – Vans xgwq5UEH5