FETCH

Name

FETCH  --  retrouve les lignes d'une table qui utilisent un curseur.

Synopsis

FETCH [ direction ] [ count ] { IN | FROM } cursor
FETCH [ FORWARD | BACKWARD | RELATIVE ] [ # | ALL | NEXT | PRIOR ] { IN | FROM } cursor
  

Entrées

direction

selector définit la direction. Ce peut être une des suivantes :

FORWARD

récupère les lignes suivantes. Valeur par défaut si selector est omis.

BACKWARD

récupère les lignes précédentes.

RELATIVE

mot bruit pour la compatibilité SQL92.

count

count détermine le nombre de lignes a récupérer. Ce peut être un des suivants :

#

un entier signé qui spécifie le nombre de lignes a récupérer. Notez qu'un entier négatif est équivalent à changer le sens FORWARD et BACKWARD.

ALL

retrouve tous les lignes restantes.

NEXT

équivalent à spécifier un compte de 1.

PRIOR

équivalent à spécifier un compte de -1.

cursor

nom d'un curseur ouvert.

Sorties

FETCH renvoie les résultats de la requête définie par le curseur. Les messages suivants seront retournés si la requête échoue :

NOTICE: PerformPortalFetch: portal "cursor" not found

Si cursor n'est pas précédemment déclaré. Le curseur doit être déclaré dans un block de transaction.

NOTICE: FETCH/ABSOLUTE not supported, using RELATIVE

PostgreSQL ne supporte pas le positionnement absolu des curseurs.

ERROR: FETCH/RELATIVE at current position is not supported

SQL92 permet de retrouver de façon répétée le curseur à sa "position courante" en utilisant la syntaxe

FETCH RELATIVE 0 FROM cursor.
	

Postgres ne supporte pas cette notion; en fait la valeur zero est réservée pour indiquer que toutes les lignes seront retrouvées et est équivalente à spécifier le mot-clé ALL. Si le mot-clé RELATIVE a été utilisé, Postgres suppose que l'utilisateur a l'intention d'utiliser un comportement SQL92 et retourne ce message d'erreur.

Description

FETCH à un utilisateur de retrouver les lignes utilisant un curseur. Le nombre de lignes retrouvées est spécifié par #. Si le nombre de lignes restantes dans le curseur est inférieur au #, alors seules celles qui sont disponibles sont récupérées. Substituer le mot-clé ALL à la place d'un nombre permet de retrouver toutes les lignes restantes dans le curseur. Les instances peuvent être récupérées dans les deux directions FORWARD et BACKWARD. La direction par défaut est FORWARD.

Tip

les nombres négatifs sont maintenant admis pour spécifier le compte de lignes. Un nombre négatif est équivalent a inverser le sens des mots-clé FORWARD et BACKWARD. Par exemple, FORWARD -1 est identique à BACKWARD 1.

Notes

Notez que les mots-clé FORWARD et BACKWARD sont des extensions Postgres. La syntaxe SQL92 est aussi supportée, spécifiée dans la seconde forme de la commande. Voir plus bas pour les détails.

La mise à jour de données dans un curseur n'est pas supportée par Postgres, parce que l'application en retour des modifications du curseur n'est généralement pas possible, comme c'est aussi le cas avec les mises à jour de VIEW. En conséquence, les utilisateurs doivent envoyer les commandes explicites UPDATE pour remplacer les données.

Les curseurs peuvent seulement être utilisés dans les transactions parce que les données qu'ils ont stockées dépensent des multiples requêtes utilisateur.

Utilisez MOVE pour changer le position du curseur. DECLARE définira un curseur. Voir BEGIN, COMMIT, et ROLLBACK pour plus d'information sur les transactions.

Utilisation

Les exemples suivants traversent une table utilisant un curseur :

-- Set up and use a cursor:

BEGIN WORK;
DECLARE liahona CURSOR FOR SELECT * FROM films;

-- Fetch first 5 rows in the cursor liahona:
FETCH FORWARD 5 IN liahona;

 code  |          title          | did | date_prod  |  kind    | len
-------+-------------------------+-----+------------+----------+-------
 BL101 | The Third Man           | 101 | 1949-12-23 | Drama    | 01:44
 BL102 | The African Queen       | 101 | 1951-08-11 | Romantic | 01:43
 JL201 | Une Femme est une Femme | 102 | 1961-03-12 | Romantic | 01:25
 P_301 | Vertigo                 | 103 | 1958-11-14 | Action   | 02:08
 P_302 | Becket                  | 103 | 1964-02-03 | Drama    | 02:28

-- Fetch previous row:
FETCH BACKWARD 1 IN liahona;

 code  | title   | did | date_prod  | kind   | len
-------+---------+-----+------------+--------+-------
 P_301 | Vertigo | 103 | 1958-11-14 | Action | 02:08

-- close the cursor and commit work:

CLOSE liahona;
COMMIT WORK;

Compatibilité

SQL92

Note

L'usage non-intégré des curseurs est une extension Postgres. La syntaxe et l'usage de curseurs est à comparer à la forme intégrée des curseurs définie en SQL92.

SQL92 admet le positionnement absolu de curseurs pour FETCH, et admet le placement des résultats dans les variables explicites :

FETCH ABSOLUTE #
    FROM cursor
    INTO :variable [, ...]
    

ABSOLUTE

Le curseur sera positionné au numéro de ligne absolu spécifié. Tous les numéros de lignes dans Postgres sont des nombres relatifs et donc cette possibilité n'est pas supportée.

:variable

variables hôtes cibles.