Fetch

Introduction

The number of returned results can be limited with the FETCH clause:

SELECT e.LastName, e.FirstName
  FROM Employee e
  FETCH FIRST 5 ROWS ONLY

The only mandatory reserved word is the word FETCH as in the example below; the other reserved words are optional.

SELECT e.LastName, e.FirstName
  FROM Employee e
  FETCH 5

Using Fetch with Other Clauses

The FETCH clause should be after the main part of the query possibly including an ORDER BY clause but before an OPTION clause including hints, see example below.

SELECT e.LastName, e.FirstName
  FROM Employee e
  ORDER BY e.FirstName
  FETCH 5
  OPTION INDEX (e MyIndexOnFirstName)

Fetch with Offset

The OFFSET clause can be used to skip a number of rows before beginning to fetch the rows. This can be used to apply patterns like result pagination. OFFSET 0 is the same as omitting the OFFSET clause.

SELECT e.LastName, e.FirstName
  FROM Employee e
  FETCH 5
  OFFSET 50

The standard OFFSET functionality typically used in RESTful web applications has a set of issues when the database is updated while data is being fetched. When using the standard OFFSET and data is updated, deleted or inserted between requests, the client will receive the same row twice (if a row already retrieved was inserted) or miss a row (if a row already retrieved was deleted).

Furthermore, OFFSET has performance limitations, since it is difficult to know which objects should be retrieved from each table to skip the requested number of rows in the result.

For the reasons outlined above, use OFFSETKEY instead of OFFSET when possible.

Last updated