Получение информации из дескриптора
Назначение
Получение значений выходных параметров предложения или информации о параметрах предложения SQL после их привязки.
Синтаксис
< получить информацию о дескрипторе >::= EXEC SQL GET DESCRIPTOR < имя дескриптора > { :< переменная основного языка > ={COUNT | KEY_TYPE} | VALUE < номер описателя параметра > < описатель параметра > [, < описатель параметра > … ] < описатель параметра >::= :< переменная основного языка > = { TYPE | LENGTH | [RETURNED_LENGTH] | PRECISION | SCALE | NULLABLE | INDICATOR | DATA | NAME } < номер описателя параметра >::= переменная основного языка
Описание
-
COUNT
– выдает общее количество описателей динамических параметров в дескрипторе< имя дескриптора >
. -
KEY_TYPE
– признак первичного ключа (зарезервировано для будущего использования). -
< Номер описателя параметра >
задает номер описателя динамического параметра в дескрипторе< имя дескриптора >
. Значение должно находиться в диапазоне от 1 до< количества описателей >
(см. опциюWITH MAX
в оператореEXEC SQL ALLOCATE DESCRIPTOR
). Если номер меньше 1 или больше< количества описателей >
, на этапе выполнения будет выдана ошибкаErrPCI_DescSmall
.< Номер описателя параметра >
может быть задан целочисленной константой или целочисленной переменной основного языка. -
О каждом динамическом параметре можно запросить информацию, которая рассмотрена в таблице 8. Поддерживаемые типы данных динамических параметров рассмотрены в таблице 9.
Таблица 8. Атрибуты динамических параметровИмя атрибута Тип данных атрибута Описание TYPE
int8
int16
int32
Тип данных параметра:
-
после выполнения оператора SQL DESCRIBE – тип формального параметра предложения SQL;
-
после установки значения посредством SET DESCRIPTOR – тип данных фактического параметра, привязанный к этому описателю.
Соответствие типов данных дескриптора и языка C/C++ приведено в таблице 10.
Коды типов данных приведены в таблице 11.
Символические имена типов данных находятся в заголовочном файле
sqlda.h
.Примечание
Строго не рекомендуется использовать числовые коды для задания типов.
LENGTH
int8
int16
int32
Объявленная длина параметра:
-
после выполнения оператора SQL DESCRIBE – длина формального параметра предложения SQL;
-
после установки значения посредством SET DESCRIPTOR – длина фактического параметра, привязанного к данному описателю.
RETURNED_LENGTH
int8
int16
int32
Фактическая длина параметра:
-
после выполнения оператора SQL DESCRIBE совпадает со значением атрибута LENGTH;
-
после исполнения запроса с выходными динамическими параметрами содержит фактическую длину полученных данных (при ошибке ErrPCI_TooLong выдается длина со знаком «минус»).
PRECISION
int8
int16
int32
Точность числа типа NUMERIC (в текущей версии не используется).
SCALE
int8
int16
int32
Масштаб числа типа NUMERIC (в текущей версии не используется).
NULLABLE
int8
int16
int32
Признак допустимости NULL-значений:
-
0 – столбец таблицы допускает NULL-значение.
-
не 0 – NULL-значения не допускаются (при попытке записать в такое поле NULL-значение на этапе выполнения фиксируется ошибочная ситуация ErrPCI_NullProhibited и значение атрибута RETURNED_LENGTH устанавливается в -1).
DATA
Значение параметра:
-
после выполнения оператора SQL DESCRIBE выдает ошибку ErrPCI_NoDest (если не было выполнено привязки параметра);
-
после привязки параметра с помощью SET DESCRIPTOR возвращает фактическое значение привязанного параметра;
-
после исполнения предложения выходные параметры содержат значения, полученные из БД.
INDICATOR
int8
int16
int32
Фактическое значение индикаторной переменной:
-
0 – значение параметра не NULL;
-
не 0 – значение параметра равно NULL.
Имеет смысл только в том случае, если значение динамическому параметру было присвоено в результате выполнения select-запроса или оператора Set Descriptor.
NAME
char[n]
Имя параметра.
После выполнения оператора SQL DESCRIBE содержит имя формального динамического параметра.
Для неименованного параметра возвращается пустая строка.
-
-
< Имя дескриптора >
, указанное в конструкции< получить информацию о дескрипторе >
, должно ссылаться на дескриптор, инициализированный ранее (ALLOCATE DESCRIPTOR
). -
Тип данных переменной, обозначенной в параметре
DATA
, должен соответствовать или приводиться к типу данных и длине описателя, указанного в< номере описателя параметра >
. -
< Номер описателя параметра >
, заданный в конструкции< получить информацию о дескрипторе >
, должен быть в диапазоне от 1 доMAX ENTRIES
, в противном случае фиксируется ошибка. Однако если< номер описателя параметра >
больше значенияCOUNT
, фиксируется ситуация «Нет данных». -
Если некоторый описатель допускает NULL-значение, то в параметре DATA обязательно должна указываться индикаторная переменная.
Тип | Имя макроса | Примечание |
---|---|---|
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 приведены типы данных, привязываемых дескрипторами, и их соответствие с типами основного языка.
Тип данных описателя дескриптора | Соответствие 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.
Тип данных СУБД ЛИНТЕР | Возвращаемый код |
---|---|
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 |