FETCH

Nom

FETCH — Donne les lignes qui utilisent un curseur
FETCH [ selector ] [ count ] { IN | FROM } cursor
FETCH [ RELATIVE ] [ { [ # | ALL | NEXT | PRIOR ] } ] FROM ] cursor
  

Entrées

selector

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 de 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.

NOTICE: PerformPortalFetch: portal "cursor" not found

Si cursor n'a pas été antérieurement déclaré. Le curseur doit être déclaré dans un block transaction.

NOTICE: FETCH/ABSOLUTE not supported, using RELATIVE

Postgres 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 utiliant 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 permet à 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 sont inférieures 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.

Tuyau

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.

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.

Une fois toutes les lignes récupérées, tout autre essai de récupération ne retourne aucune ligne.

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.

Notes

Voir la commande MOVE pour changer la position du curseur. Voir la commande DECLARE pour déclarer un curseur. Voir BEGIN, COMMIT, et ROLLBACK pour plus d'information sur les transactions.

Utilisation

   --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é

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 dans SQL92.

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.