An SQLDA contains a
variable number of occurrences of SQLVAR entries, each of which contains
a set of fields that describe one column in a row of data. There are
two types of SQLVAR entries: base SQLVAR entries and secondary SQLVAR
entries.
About this task
The following diagram describes the structure of the
SQLDA.
Figure 1. The SQL Descriptor Area (SQLDA)
Because the number of SQLVAR entries required depends
on the number of columns in the result table, an application must
be able to allocate an appropriate number of SQLVAR elements when
needed. Use one of the following methods:
Procedure
- Provide the largest SQLDA (that is, the one with the greatest
number of SQLVAR entries) that is needed. The maximum number of columns
that can be returned in a result table is 255. If any of the columns
being returned is either a LOB type or a distinct type, the value
in SQLN is doubled, and the number of SQLVAR entries needed to hold
the information is doubled to 510. However, as most SELECT statements
do not even retrieve 255 columns, most of the allocated space is unused.
- Provide a smaller SQLDA with fewer SQLVAR entries. In this
case, if there are more columns in the result than SQLVAR entries
allowed for in the SQLDA, no descriptions are returned. Instead, the database
manager returns
the number of select list items detected in the SELECT statement.
The application allocates an SQLDA with the required number of SQLVAR
entries, then uses the DESCRIBE statement to acquire the column descriptions.
- When any of the columns returned has a LOB or user defined
type, provide an SQLDA with the exact number of SQLVAR entries.
What to do next
For all three methods, the question arises as to how many
initial SQLVAR entries you should allocate. Each SQLVAR element uses
up 44 bytes of storage (not counting storage allocated for the SQLDATA
and SQLIND fields). If memory is plentiful, the first method of providing
an SQLDA of maximum size is easier to implement.
The second
method of allocating a smaller SQLDA is only applicable to programming
languages such as C and C++ that support the dynamic allocation of
memory. For languages such as COBOL and FORTRAN that do not support
the dynamic allocation of memory, use the first method.