Field lists
- Last Updated: March 30, 2020
- 2 minute read
- OpenEdge
- Version 12.2
- Documentation
The DataServer fully supports field lists in
queries (DEFINE QUERY, FOR EACH, PRESELECT,
and SQL SELECT statements). For example, the following
statement returns the same results for OpenEdge and Oracle databases:
|
Include the SCROLLING option
to enable record prefetch. You must include the NO-LOCK option
when you open queries with field lists, as in the following example:
|
Similarly, you must include the NO-LOCK option
in FOR EACH statements that include field
lists, as in the following example:
|
The NO-LOCK option ensures
that the DataServer does not have to refetch rows, which might slow
performance. In addition, combining lookahead cursors and field
lists especially improves a query's performance. See Sample Queries for a comparison of lookahead and standard cursors
with field lists.
Use field lists to retrieve only those fields that your application requires. (For performance reasons, the DataServer retrieves the first index field even when you do not include it in the field list. In cases when the DataServer can predict that a query requires a refetch, it retrieves the entire record.) The DataServer allocates memory based on the maximum size specified for a field in a record. Omitting larger fields or unnecessary fields from a query enhances performance.
When you specify a field
that has an extent, the query returns the entire array. You can
specify an Oracle LONG column in a field list.
However, when the query selects a LONG column that has
more than 255 bytes of data, the DataServer refetches the column
using a row identifier (PROGRESS_RECID column,
unique NUMBER index, or native ROWID).
In the case of views with aggregates or joins where there is no
row identifier, the query stops and you receive an error that the
record was truncated.
When the DataServer processes a query with a field list, it caches the fields that are part of the field list and any other fields that the query specified on the client, which you can then access without making another call to the Oracle RDBMS. For example, the DataServer fetches the name and the zip field to process the following query:
|
If you specify a field list in a join, you might
have to adjust the cache size for lookahead cursors, either with
the CACHE-SIZE option in a QUERY-TUNING phrase,
or at the session level with the -Dsrv qt_cache_size startup parameter.
Any
performance gained through field lists is lost if you use nonlookahead cursors
or SHARE-LOCK.
See the Record Phrase entry in ABL Reference
for more information on the FIELDS option.