FirebirdSQL logo

FETCH, OFFSET

Les clauses FETCH et OFFSET sont des équivalents compatibles SQL:2008 des clauses FIRST/SKIP et une alternative à la clause ROWS.La clause OFFSET indique le nombre de lignes à sauter. La clause FETCH indique le nombre de lignes à récupérer.Les clauses OFFSET et FETCH peuvent être appliquées quel que soit le niveau d’imbrication des expressions de la requête.

Syntaxe
SELECT <columns> FROM ...
  [WHERE ...]
  [ORDER BY ...]
  [OFFSET <offset-fetch-expression> {ROW | ROWS}]
  [FETCH {FIRST | NEXT} [ <offset-fetch-expression> ] { ROW | ROWS } ONLY]

<offset-fetch-expression>  ::=
    <integer-literal>
  | <query-parameter>
Table 1. Paramètres des clauses `OFFSET' et `FETCH'.
Paramètre Description

integer-literal

integer littéral

query-parameter

Requête paramétrique. ? en DSQL et :paramname en PSQL

Note
  • Firebird ne supporte pas l’indication FETCH en pourcentage, qui est définie dans la norme.

  • Firebird ne supporte pas la proposition FETCH avec l’option WITH TIES définie dans la norme.

  • FIRST …​ SKIP et ROWS sont des alternatives non standard.

  • Les clauses OFFSET et/ou FETCH ne peuvent pas être combinées avec les clauses ROWS ou FIRST/SKIP dans la même expression de requête.

  • Les expressions, les références de colonnes, etc. ne sont pas autorisées dans les deux clauses.

  • Contrairement à la proposition ROWS, les propositions OFFSET et FETCH ne sont autorisées que dans l’instruction SELECT.

Exemples d’utilisation de "OFFSET" et "FETCH".

La requête suivante renvoie toutes les lignes sauf les 10 premières, classées par la colonne COL1 :

SELECT *
FROM T1
ORDER BY COL1
OFFSET 10 ROWS

Cet exemple renvoie les 10 premières lignes ordonnées par la colonne COL1 :

SELECT *
FROM T1
ORDER BY COL1
FETCH FIRST 10 ROWS ONLY

Utilisation des clauses OFFSET et FETCH dans une table dérivée, dont le résultat est à nouveau délimité dans une requête externe.

SELECT *
FROM (
  SELECT *
  FROM T1
  ORDER BY COL1 DESC
  OFFSET 1 ROW
  FETCH NEXT 10 ROWS ONLY
) a
ORDER BY a.COL1
FETCH FIRST ROW ONLY
Voir aussi :

ROWS, "FIRST, SKIP".