SQL DESCRIBE COLUMN Statement

 <     >  Status Inquiry Statements Query Statements Example Flow Chart Table of Contents

 

The SQL DESCRIBE COLUMN statement returns a group that describes a column in the result set of a query.

QueryHandle (input). This argument must specify a numeric integer value with at least six digits of precision. The value identifies the query for which a result column is to be described. This value must have been returned from a successful SQL PREPARE QUERY statement or any of the browse statements.

ColNameOrNumberN (input). This argument must specify a nonnumeric value or a numeric integer value. If the argument is nonnumeric, then its value identifies the column name of a column in the result set that is to be described. If the argument is numeric, then its value identifies the column number of a column in the result set that is to be described. Columns in the result set are numbered from left to right starting with one (1).

ColDescGroupN (output). This argument must refer to a group data item that has the same data description as either sql-Column-Description or sql-Column-Description-Ext defined in the copy file lisqldef.cpy. The description of the column is stored in the specified group data item.

The SQL DESCRIBE COLUMN statement can be used to return a brief column description or an extended column description. If sql-Column-Description, or another group with the same description, is specified for the ColDescGroupN argument, then the brief form of the column description is returned. If sql-Column-Description-Ext, or another group with the same description, is specified for the ColDescGroupN argument, then the extended form of the column description is returned.

The data description entries for the elementary items of an sql-Column-Description group are provided in the copy file lisqldcl.cpy. Only one column description group is provided in the copy file lisqldef.cpy. Since SQL statements frequently have multiple result columns, it is usually desirable to define a table of column description entries. This is easily accomplished by copying the copy file lisqldcl.cpy following a data description entry that names the table and specifies an OCCURS clause with the desired number of entries. If extended column descriptions are desired, the copy file lisqlxcl.cpy should also be copied in this table data description entry. For example, a table of extended column descriptions can be defined as follows:

78 MaxColumns VALUE 25.
01 ColDescGroup.
02 ColDescTable OCCURS MaxColumns TIMES.
COPY "lisqldcl.cpy".
COPY "lisqlxcl.cpy".

The column descriptions could then be obtained as follows:

SQL DESCRIBE QUERY sql-QueryHandle *> Get number of columns
sql-Query-Description. *>
in sql-QryNoCols.
PERFORM VARYING sql-ColumnNumber FROM 1 BY 1
UNTIL sql-ColumnNumber > sql-QryNoCols
SQL DESCRIBE COLUMN sql-QueryHandle
sql-ColumnNumber, ColDescTable(sql-ColumnNumber)
END-PERFORM.

Since the copy file lisqldef.cpy defines sql-Column-Description-Ext as a group that also copies lisqldcl.cpy and lisqlxcl.cpy, references to data items in the above definition of ColDescTable require qualification as shown in the following code fragment:

DISPLAY "Column data type = "
sql-ColType OF ColDescGroup(sql-ColumnNumber).
DISPLAY "Column length = "
sql-ColLength OF ColDescGroup(sql-ColumnNumber).

The meanings of the values returned in an sql-Column-Description group are as follows:

20 sql-ColType PIC S9(06) LEADING.
88 sql-IsTypeChar VALUE sql-Char.
88 sql-IsTypeVarChar VALUE sql-VarChar.
88 sql-IsTypeLongVarChar VALUE sql-LongVarChar.
88 sql-IsTypeNumeric VALUE sql-Numeric.
88 sql-IsTypeDecimal VALUE sql-Decimal.
88 sql-IsTypeBit VALUE sql-Bit.
88 sql-IsTypeTinyInt VALUE sql-TinyInt.
88 sql-IsTypeSmallInt VALUE sql-SmallInt.
88 sql-IsTypeInteger VALUE sql-Integer.
88 sql-IsTypeBigInt VALUE sql-BigInt.
88 sql-IsTypeFloat VALUE sql-Float.
88 sql-IsTypeReal VALUE sql-Real.
88 sql-IsTypeDouble VALUE sql-Double.
88 sql-IsTypeDate VALUE sql-Date.
88 sql-IsTypeTime VALUE sql-Time.
88 sql-IsTypeTimeStamp VALUE sql-TimeStamp.
88 sql-IsTypeBinary VALUE sql-Binary.
88 sql-IsTypeVarBinary VALUE sql-VarBinary.
88 sql-IsTypeLongVarBinary VALUE sql-LongVarBinary.
88 sql-IsTypeNull VALUE sql-Type-Null.

The value of sql-ColType is the SQL data type of the column in the result set.

20 sql-ColLength PIC S9(10) LEADING.

The value of sql-ColLength is the length of the column in the result set. This is the length of the C data item transferred from the data source to an InstantSQL buffer when rows are fetched.

For the sql-Bit and sql-TinyInt data types, the length is 1.

For the sql-SmallInt data type, the length is 2.

For the sql-Integer and sql-Real data types, the length is 4.

For the sql-BigInt, sql-Double, and sql-Float data types, the length is 8.

For the sql-Numeric and sql-Decimal data types, the length is the column precision plus 2, which allows for a sign and decimal point character.

For the sql-Date and sql-Time data types, the length is 6.

For the sql-Timestamp data type, the length is 16.

For the sql-Char, sql-VarChar, sql-Binary, and sql-VarBinary data types, the length is the length of the column in the data source.

For sql-LongVarChar and sql-LongVarBinary data types, the length initially is the length specified by the configuration options LongVarCharDataSize and LongVarBinaryDataSize, respectively, unless the length of the column in the data source is less, in which case the length of the column in the data source takes precedence. Typically, the length for sql-LongVarChar and sql-LongVarBinary data types is very large, for example, 1073741824 (X"40000000"), even though the longest data actually present in the column may be much smaller. After an SQL BIND COLUMN statement is executed that binds a COBOL data item to a column of this type, the length is changed to the length of the COBOL data item if the length of the COBOL data item is longer than the configured length.

20 sql-ColPrecision PIC S9(10) LEADING.

For character and binary data, the value of sql-ColPrecision is the same as sql-ColLength. For numeric data, the value is the number of digits of precision supported by the column in the data source.

20 sql-ColScale PIC S9(04) LEADING.

For numeric data, the value of sql-ColScale is the number of digits to the right of the decimal point.

20 sql-ColUnsigned PIC 9(01).
88 sql-IsUnsigned VALUE 1 FALSE 0.
88 sql-IsSigned VALUE 0 FALSE 1.

The value of sql-ColUnsigned indicates whether the column is unsigned or signed.

20 sql-ColNullable PIC 9(01).
88 sql-IsNotNullable VALUE sql-No-Nulls.
88 sql-IsNullable VALUE sql-Nullable.
88 sql-IsNullableUnknown VALUE sql-Nullable-Unknown.

The value of sql-ColNullable indicates whether the column allows NULLs, does not allow NULLs, or that it is unknown whether the column allows NULLs.

20 sql-ColNumber PIC 9(04).

The value of sql-ColNumber is the column number (useful if the column was described by using the column name).

20 sql-ColNameGroup.
24 sql-ColNameLength PIC S9(04) LEADING.
24 sql-ColName PIC X(sql-ColumnNameSize).

The value of sql-ColNameLength is the length of the column name in the sql-ColName data item, which follows. The value is zero for columns without a name or for which the driver cannot determine the name.

The value of sql-ColName is the column name. A string of all spaces is returned for columns without a name or for which the driver cannot determine the name.

An sql-Column-Description-Ext group includes the items described for an sql-Column-Description group plus an extension set of items. The data description entries for the elementary items of the extension portion of the sql-Column-Description-Ext group are provided in the copy file lisqlxcl.cpy. The meanings of the extension items in an sql-Col-Description-Ext group are as follows:

20 sql-ColAutoUniqueValue PIC 9(01).
88 sql-IsAutoUniqueValue VALUE 1 FALSE 0.

The value of sql-ColAutoUniqueValue indicates whether the column is auto-unique or not auto-unique.

This field is valid for numeric data type columns only. An application can insert values into a row containing an auto-unique column, but typically cannot update values in the column.

When an insert is made into an auto-unique column, a unique value is inserted into the column at insert time. This is frequently accomplished with an auto-incrementing column. The increment is not defined, but is data source  specific. A portable application should not assume that an auto-unique column starts with or increments by any particular value.

20 sql-ColCaseSensitive PIC 9(01).
88 sql-IsCaseSensitive VALUE 1 FALSE 0.

The value of sql-ColCaseSensitive indicates whether the column is treated as case sensitive for collations and comparisons. The value is only meaningful for character data. The value 0 is returned for numeric data.

20 sql-ColDisplaySize PIC S9(10) LEADING.

The value of sql-ColDisplaySize indicates the maximum number of characters required for displaying data from the column.

20 sql-ColFixedPrecScale PIC 9(01).
88 sql-IsFixedPrecScale VALUE 1 FALSE 0.

The value of sql-ColFixedPrecScale indicates whether the column has fixed precision and nonzero scale that are data source - specific, such as a "money" value might have.

20 sql-ColLabelGroup.
24 sql-ColLabelLength PIC S9(04) LEADING.
24 sql-ColLabel PIC X(sql-ColumnNameSize).

The value of sql-ColLabelLength is the length of the column label in the sql-ColLabel data item, which follows. The value is zero if the column is unlabeled and unnamed.

The value of sql-ColLabel is the column label or title. For example, a column named EmpName might be labeled Employee Name, or might be labeled with an alias. If a column does not have a label, the column name is returned. If the column is unlabeled and unnamed, a string of all spaces is returned.

20 sql-ColSearchable PIC 9(04).
88 sql-IsPredNone VALUE sql-Pred-None.
88 sql-IsPredChar VALUE sql-Pred-Char.
88 sql-IsPredBasic VALUE sql-Pred-Basic.
88 sql-IsPredSearchable VALUE sql-Pred-Searchable.

The value of sql-ColSearchable indicates whether the column may be specified in predicates as follows:

sql-Pred-None if the column may not be used in a WHERE clause.

sql-Pred-Char if the column may be used in a WHERE clause, but only with the LIKE predicate.

sql-Pred-Basic if the column may be used in a WHERE clause with all the comparison operators except LIKE.

sql-Pred-Searchable if the column may be used in a WHERE clause with any comparison operator.

Columns of type sql-LongVarChar and sql-LongVarBinary usually return sql-Pred-Char.

20 sql-ColTableNameGroup.
24 sql-ColTableNameLength PIC S9(04) LEADING.
24 sql-ColTableName PIC X(sql-TableNameSize).

The value of sql-ColTableNameLength is the length of the table name in the sql-ColTableName data item, which follows. The value is zero if the table name cannot be determined.

The value of sql-ColTableName is the name of the table that contains the column. The returned value is implementation-defined if the column is an expression or if the column is part of a view. If the table name cannot be determined, a string of all spaces is returned.

20 sql-ColTypeNameGroup.
24 sql-ColTypeNameLength PIC S9(04) LEADING.
24 sql-ColTypeName PIC X(sql-DataTypeNameSize).

The value of sql-ColTypeNameLength is the length of the type name in the sql-ColTypeName data item, which follows. The value is zero if the type is unknown.

The value of sql-ColTypeName indicates the data source  dependent data type name; for example, "CHAR", "VARCHAR", "MONEY", "LONG VARBINARY", or "CHAR ( ) FOR BIT DATA". If the type is unknown, a string of all spaces is returned.

20 sql-ColUpdatable PIC 9(04).
88 sql-IsReadOnly VALUE sql-Attr-ReadOnly.
88 sql-IsWritable VALUE sql-Attr-Write.
88 sql-IsReadWriteUnknown
VALUE sql-Attr-ReadWrite-Unknown.

The value of sql-ColUpdatable indicates the updatability of the column in the result set as follows:

sql-Attr-ReadOnly if the column is read-only (cannot be updated).

sql-Attr-Write if the column is read-write (can be updated).

sql-Attr-ReadWrite-Unknown if it is unknown whether the column can be updated.

This value does not describe the updatability of the column in the base table. The updatability of the base column on which the result set column is based may be different from the value in this field. Whether a column is updatable may be based on the data type, user privileges, and the definition of the result set itself. If it is unclear whether a column is updatable, sql-Attr-ReadWrite-Unknown should be returned by the driver.

SQL DESCRIBE COLUMN Statement Example:

 

PERFORM VARYING ColumnNumber FROM 1 BY 1
UNTIL ColumnNumber > sql-QryNoCols
SQL DESCRIBE COLUMN
sql-QueryHandle,
ColumnNumber, ColumnDesc(ColumnNumber)
END-PERFORM.

Copyright 2000 Liant Software Corp. All rights reserved.