

FETCH — Récupérer les lignes d'une requête à l'aide d'un curseur
FETCH [direction] [ FROM | IN ]nom_curseuroùdirectionfait partie de : NEXT PRIOR FIRST LAST ABSOLUTEnombreRELATIVEnombrenombreALL FORWARD FORWARDnombreFORWARD ALL BACKWARD BACKWARDnombreBACKWARD ALL
   FETCH récupère des lignes en utilisant un curseur précédemment
   ouvert.
  
   À un curseur est associée une position associée utilisée par FETCH.
   Le curseur peut être positionné avant la première ligne du résultat de la
   requête, sur une ligne particulière du résultat ou après la dernière ligne du
   résultat. À sa création, le curseur est positionné avant la première ligne.
   Après récupération de lignes, le curseur est positionné sur la ligne la plus
   récemment récupérée. Si FETCH atteint la fin des lignes
   disponibles, il est positionné après la dernière
   ligne ou avant la première ligne dans le cas d'une récupération remontante.
   FETCH ALL ou FETCH BACKWARD ALL positionne toujours le
   curseur après la dernière ligne ou avant la première ligne.
  
   Les formes NEXT, PRIOR, FIRST,
   LAST, ABSOLUTE, RELATIVE récupèrent une
   seule ligne après déplacement approprié du curseur. Si cette ligne
   n'existe pas, un résultat vide est renvoyé et le curseur est positionné
   avant la première ligne ou après la dernière ligne, en fonction du sens de
   la progression.
  
   Les formes utilisant FORWARD et BACKWARD récupèrent
   le nombre de lignes indiqué en se déplaçant en avant ou en arrière, laissant
   le curseur positionné sur la dernière ligne renvoyée (ou après/avant toutes
   les lignes si nombre dépasse le
   nombre de lignes disponibles).
  
   RELATIVE 0, FORWARD 0 et
   BACKWARD 0 récupèrent tous la ligne actuelle sans
   déplacer le curseur, c'est-à-dire qu'ils effectuent une nouvelle récupération de la ligne
   dernièrement récupérée. La commande réussit sauf si le curseur est positionné
   avant la première ligne ou après la dernière ligne ; dans ce cas, aucune
   ligne n'est renvoyée.
  
Cette page décrit l'utilisation des curseurs au niveau de la commande SQL. Si vous voulez utiliser des curseurs dans une fonction PL/pgSQL, les règles sont différentes -- voir Section 43.7.3.
directionLa direction et le nombre de lignes à récupérer. Ce paramètre peut prendre les valeurs suivantes :
NEXT
          La ligne suivante est récupérée. C'est le comportement par défaut si
          direction est omis.
         
PRIORLa ligne précédente est récupérée.
FIRST
          La première ligne de la requête est récupérée. C'est identique à
          ABSOLUTE 1.
         
LAST
          La dernière ligne de la requête est récupérée. C'est identique à
          ABSOLUTE -1.
         
ABSOLUTE nombre
          La nombre-ième ligne de la requête est récupérée, ou la
          abs(-ième ligne à partir
          de la fin si nombre)nombre est négatif.
          Le curseur est positionné avant
          la première ligne ou après la dernière si nombre est en dehors des
          bornes ; en particulier, ABSOLUTE 0 le
          positionne avant la première ligne.
         
RELATIVE nombre
          La nombre-ième ligne suivante est récupérée, ou la
          abs(-ième ligne précédente
          si nombre)nombre est négatif.
          RELATIVE 0 récupère de nouveau la ligne courante, si elle existe.
         
nombre
          Les nombre lignes suivantes sont récupérées.
          C'est identique à FORWARD .
         nombre
ALL
          Toutes les lignes restantes sont récupérées. C'est identique à FORWARD ALL).
         
FORWARD
          La ligne suivante est récupérée. C'est identique à NEXT.
         
FORWARD nombre
          Les nombre lignes suivantes sont récupérées.
          FORWARD 0 récupère de nouveau la ligne courante.
         
FORWARD ALLToutes les lignes restantes sont récupérées.
BACKWARD
          La ligne précédente est récupérée. C'est identique à PRIOR.
         
BACKWARD nombre
          Les nombre lignes précédentes sont récupérées
          (parcours inverse). BACKWARD 0 récupère de nouveau la ligne
          courante.
         
BACKWARD ALLToutes les lignes précédentes sont récupérées (parcours inverse).
nombre
      Constante de type entier éventuellement signé, qui précise l'emplacement ou le nombre
      de lignes à récupérer. Dans le cas de FORWARD et
      BACKWARD, préciser une valeur négative pour
      nombre est équivalent à modifier le sens
      de FORWARD et BACKWARD.
     
nom_curseurLe nom d'un curseur ouvert.
   En cas de succès, une commande FETCH renvoie une balise de
   commande de la forme
   
FETCH nombre
   
   Le nombre est le nombre de
   lignes récupérées (éventuellement zéro). Dans
   psql, la balise de commande n'est pas
   réellement affichée car psql affiche à la place
   les lignes récupérées.
  
   Le curseur doit être déclaré avec l'option SCROLL si
   les variantes de FETCH autres que
   FETCH NEXT ou FETCH FORWARD avec un nombre positif
   sont utilisées.
   Pour les requêtes simples, PostgreSQL autorise
   les parcours inverses à partir de curseurs non déclarés avec
   SCROLL. il est toutefois préférable de ne pas se fonder
   sur ce comportement. Si le curseur
   est déclaré avec NO SCROLL, aucun parcours inverse n'est
   autorisé.
  
   Les récupérations ABSOLUTE ne sont pas plus rapides que
   la navigation vers la ligne désirée par déplacement relatif : de toute
   façon, l'implantation sous-jacente doit parcourir toutes les lignes
   intermédiaires. Les récupérations absolues négatives font même pis :
   la requête doit être lue jusqu'à la fin pour trouver la dernière ligne, puis relue
   en sens inverse à partir de là. Néanmoins, remonter vers le début de la requête
   (comme avec FETCH ABSOLUTE 0) est rapide.
  
   DECLARE est utilisé pour
   définir un curseur. MOVE
   est utilisé pour modifier la position du curseur sans récupérer les données.
  
Parcourir une table à l'aide d'un curseur :
BEGIN WORK; -- Initialiser le curseur : DECLARE liahona SCROLL CURSOR FOR SELECT * FROM films; -- Récupèrer les 5 premières lignes du curseur liahona : FETCH FORWARD 5 FROM liahona; code | titre | did | date_prod | genre | longueur -------+-------------------------+-----+------------+----------+----------- 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 -- Récupèrer la ligne précédente : FETCH PRIOR FROM liahona; code | titre | did | date_prod | genre | longueur -------+---------+-----+------------+--------+----------- P_301 | Vertigo | 103 | 1958-11-14 | Action | 02:08 -- Fermer le curseur et terminer la transaction: CLOSE liahona; COMMIT WORK;
   Le standard SQL ne définit FETCH que pour une utilisation
   en SQL embarqué. La variante de FETCH
   décrite ici renvoie les données comme s'il s'agissait du
   résultat d'un SELECT plutôt que de le placer dans des variables
   hôtes. À part cela, FETCH est totalement
   compatible avec le standard SQL.
  
   Les formes de FETCH qui impliquent FORWARD et
   BACKWARD, ainsi que les formes
   FETCH  et
   nombreFETCH ALL, dans lesquelles FORWARD est implicite, sont
   des extensions PostgreSQL.
  
   Le standard SQL n'autorise que FROM devant le nom du
   curseur ; la possibilité d'utiliser IN, ou de les
   laisser, est une extension.