Получение информации из дескриптора

Назначение

Получение значений выходных параметров предложения или информации о параметрах предложения SQL после их привязки.

Синтаксис
 
< получить информацию о дескрипторе >::=
EXEC SQL GET DESCRIPTOR < имя дескриптора >
  { :<  переменная основного языка > ={COUNT | KEY_TYPE}
  | VALUE < номер описателя параметра >
< описатель параметра > [, < описатель параметра > … ]
< описатель параметра >::=
  :<  переменная основного языка > =
  { TYPE
    | LENGTH
    | [RETURNED_LENGTH]
    | PRECISION
    | SCALE
    | NULLABLE
    | INDICATOR
    | DATA
    | NAME }
< номер описателя параметра >::= переменная основного языка
Описание
  1. COUNT – выдает общее количество описателей динамических параметров в дескрипторе < имя дескриптора >.

  2. KEY_TYPE – признак первичного ключа (зарезервировано для будущего использования).

  3. < Номер описателя параметра > задает номер описателя динамического параметра в дескрипторе < имя дескриптора >. Значение должно находиться в диапазоне от 1 до < количества описателей > (см. опцию WITH MAX в операторе EXEC SQL ALLOCATE DESCRIPTOR). Если номер меньше 1 или больше < количества описателей >, на этапе выполнения будет выдана ошибка ErrPCI_DescSmall. < Номер описателя параметра > может быть задан целочисленной константой или целочисленной переменной основного языка.

  4. О каждом динамическом параметре можно запросить информацию, которая рассмотрена в таблице 8. Поддерживаемые типы данных динамических параметров рассмотрены в таблице 9.

    Таблица 8. Атрибуты динамических параметров
    Имя атрибутаТип данных атрибутаОписание

    TYPE

    int8

    int16

    int32

    Тип данных параметра:

    1. после выполнения оператора SQL DESCRIBE – тип формального параметра предложения SQL;

    2. после установки значения посредством SET DESCRIPTOR – тип данных фактического параметра, привязанный к этому описателю.

    Соответствие типов данных дескриптора и языка C/C++ приведено в таблице 10.

    Коды типов данных приведены в таблице 11.

    Символические имена типов данных находятся в заголовочном файле sqlda.h.

    Примечание

    Строго не рекомендуется использовать числовые коды для задания типов.

    LENGTH

    int8

    int16

    int32

    Объявленная длина параметра:

    1. после выполнения оператора SQL DESCRIBE – длина формального параметра предложения SQL;

    2. после установки значения посредством SET DESCRIPTOR – длина фактического параметра, привязанного к данному описателю.

    RETURNED_LENGTH

    int8

    int16

    int32

    Фактическая длина параметра:

    1. после выполнения оператора SQL DESCRIBE совпадает со значением атрибута LENGTH;

    2. после исполнения запроса с выходными динамическими параметрами содержит фактическую длину полученных данных (при ошибке ErrPCI_TooLong выдается длина со знаком «минус»).

    PRECISION

    int8

    int16

    int32

    Точность числа типа NUMERIC (в текущей версии не используется).

    SCALE

    int8

    int16

    int32

    Масштаб числа типа NUMERIC (в текущей версии не используется).

    NULLABLE

    int8

    int16

    int32

    Признак допустимости NULL-значений:

    1. 0 – столбец таблицы допускает NULL-значение.

    2. не 0 – NULL-значения не допускаются (при попытке записать в такое поле NULL-значение на этапе выполнения фиксируется ошибочная ситуация ErrPCI_NullProhibited и значение атрибута RETURNED_LENGTH устанавливается в -1).

    DATA

    Значение параметра:

    1. после выполнения оператора SQL DESCRIBE выдает ошибку ErrPCI_NoDest (если не было выполнено привязки параметра);

    2. после привязки параметра с помощью SET DESCRIPTOR возвращает фактическое значение привязанного параметра;

    3. после исполнения предложения выходные параметры содержат значения, полученные из БД.

    INDICATOR

    int8

    int16

    int32

    Фактическое значение индикаторной переменной:

    1. 0 – значение параметра не NULL;

    2. не 0 – значение параметра равно NULL.

    Имеет смысл только в том случае, если значение динамическому параметру было присвоено в результате выполнения select-запроса или оператора Set Descriptor.

    NAME

    char[n]

    Имя параметра.

    После выполнения оператора SQL DESCRIBE содержит имя формального динамического параметра.

    Для неименованного параметра возвращается пустая строка.


  5. < Имя дескриптора >, указанное в конструкции < получить информацию о дескрипторе >, должно ссылаться на дескриптор, инициализированный ранее (ALLOCATE DESCRIPTOR).

  6. Тип данных переменной, обозначенной в параметре DATA, должен соответствовать или приводиться к типу данных и длине описателя, указанного в < номере описателя параметра >.

  7. < Номер описателя параметра >, заданный в конструкции < получить информацию о дескрипторе >, должен быть в диапазоне от 1 до MAX ENTRIES, в противном случае фиксируется ошибка. Однако если < номер описателя параметра > больше значения COUNT, фиксируется ситуация «Нет данных».

  8. Если некоторый описатель допускает NULL-значение, то в параметре DATA обязательно должна указываться индикаторная переменная.

Таблица 9. Таблица поддерживаемых типов данных
ТипИмя макросаПримечание

integer

int

PCC_INT_TYP

Входные/выходные переменные

float

PCC_FLT_TYP

Входные/выходные переменные

decimal

numeric

PCC_DEC_TYP

Входные/выходные переменные

character

char

PCC_CHR_TYP

Входные/выходные переменные

text

varchar

PCC_TXT_TYP

Входные/выходные переменные

smallint

PCC_SML_TYP

Входные/выходные переменные

real

PCC_REL_TYP

Входные/выходные переменные

double

PCC_DBL_TYP

Входные/выходные переменные

date

PCC_DAT_TYP

Входные/выходные переменные

byte

PCC_BIT_TYP

Входные/выходные переменные

varbyte

PCC_BVT_TYP

Входные/выходные переменные

bool

PCC_BOO_TYP

Входные/выходные переменные

bigint

PCC_BIGINT_TYP

Входные/выходные переменные


В таблице 10 приведены типы данных, привязываемых дескрипторами, и их соответствие с типами основного языка.

Таблица 10. Соответствие типов данных дескриптора и языка C/C++
Тип данных описателя дескриптораСоответствие C/C++Размер, байт

PCC_INT_TYP

int

4

PCC_SML_TYP

short

4

PCC_FLT_TYP

float

4

PCC_REL_TYP

float

4

PCC_DBL_TYP

double

8

PCC_DEC_TYP

decimal

16

PCC_CHR_TYP

char[n]

n

PCC_TXT_TYP

varchar_pci(n)

n+2

PCC_BIT_TYP

unsigned char[n]

n

PCC_BVT_TYP

varbit_pci(n)

n+2

PCC_DAT_TYP

pccdate

32

PCC_BLB_TYP

char[24]

24


Эти макросы описаны в sqlda.h. Их численные значения совпадают с номерами типов SQL, предопределенных стандартом SQL93.

Таблица 11. Коды типов данных, возвращаемые дескриптором
Тип данных СУБД ЛИНТЕРВозвращаемый код

byte

PCC_BIT_TYP

varbyte

PCC_BVT_TYP

blob

PCC_BLB_TYP

Boolean

PCC_BOO_TYP

char

PCC_CHR_TYP

varchar

PCC_TXT_TYP

date

PCC_DAT_TYP

decimal

PCC_DEC_TYP

double

PCC_DBL_TYP

float

PCC_FLT_TYP

int

PCC_INT_TYP

numeric

PCC_DEC_TYP

real

PCC_REL_TYP

smalint

PCC_SML_TYP