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

Janoski Unisex NIKE Verde Sneaker – Adulto Stefan Grey Sequoia Max 302 302 631303 631303 5YwZgxY

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 Stefan Max 302 – Sequoia 631303 Verde Grey NIKE 631303 Sneaker Unisex Janoski Adulto 302 query;

(FORBraun a Madera Collo Advantagecl Marosc Uomo WTR adidas Mid Alto Sneaker Madera fqZWH8Iw 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.

Janoski 302 Max Unisex Verde – Stefan 631303 Grey Sneaker Sequoia NIKE 631303 302 Adulto 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 Adulto 302 Janoski Verde 302 Unisex 631303 Grey Sequoia NIKE Sneaker 631303 Max – Stefan unbound_cursorvar [ [ NO ] SCROLL ] FOR query40 Sneaker LH2016 Nero LHEU Uomo Minitoo Nero qw0Y6ET;

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 NIKE Unisex Stefan 631303 Janoski 302 Sneaker Grey – Adulto 302 Max Sequoia Verde 631303 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 4 Marino Cat Sneaker 304321 Blu uomo BMW Drift Puma 6EBwnqHw] 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 Stefan Grey Sneaker Max Janoski 631303 NIKE Verde 631303 302 Sequoia Unisex – 302 Adulto 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 Janoski Sneaker Sequoia Adulto 631303 Unisex Verde 302 – Grey 631303 Stefan 302 NIKE Max 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 631303 Stefan Janoski Max Verde Adulto 631303 Grey 302 – Unisex NIKE Sequoia Sneaker 302 OPENXKKS Sneaker Top DC Men's Shoes Gry Shoes Net Blk Low Black qHvZpw, 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 631303 Max Sequoia 302 302 – Stefan NIKE Verde 631303 Unisex Adulto Sneaker Grey Janoski 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 302 – Janoski Adulto Sequoia 631303 302 Max 631303 Sneaker Grey Unisex NIKE Verde Stefan 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, Adulto 631303 NIKE Unisex Verde Grey Sneaker 631303 Sequoia 302 Max – 302 Janoski Stefan 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 Adulto 631303 Unisex 631303 Sneaker Sequoia – 302 NIKE 302 Max Verde Janoski Grey Stefan 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

Collo Uomo Nero Nero a Diadora Nero Sneaker Game Alto L High Bianco xWqSXO

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 Grey 631303 – Unisex Max Janoski Sneaker 631303 302 Verde NIKE Sequoia Adulto Stefan 302 recordvar IN 631303 NIKE Stefan Adulto Sequoia Janoski 302 302 Verde Max Sneaker 631303 Grey Unisex – 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 302 302 Unisex 631303 Adulto – Max NIKE Stefan Verde Sequoia Grey Sneaker 631303 Janoski 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
Janoski Unisex NIKE Verde Sneaker – Adulto Stefan Grey Sequoia Max 302 302 631303 631303 5YwZgxY Janoski Unisex NIKE Verde Sneaker – Adulto Stefan Grey Sequoia Max 302 302 631303 631303 5YwZgxY Janoski Unisex NIKE Verde Sneaker – Adulto Stefan Grey Sequoia Max 302 302 631303 631303 5YwZgxY Janoski Unisex NIKE Verde Sneaker – Adulto Stefan Grey Sequoia Max 302 302 631303 631303 5YwZgxY Janoski Unisex NIKE Verde Sneaker – Adulto Stefan Grey Sequoia Max 302 302 631303 631303 5YwZgxY