Присвоение значений дескриптору
Назначение
Описание фактических значений параметров динамического запроса и присвоение входным параметрам в дескрипторе требуемых значений для последующего использования в динамических SQL-запросах.
Синтаксис
<присвоить значение дескриптору>::= EXEC SQL SET DESCRIPTOR <имя дескриптора> COUNT = :<переменная основного языка> | <литерал> | VALUE <номер параметра> <описатель параметра> [, < описатель параметра> … ] <описатель параметра>::= { TYPE | LENGTH | PRECISION | SCALE | NULLABLE | INDICATOR | DATA } = :{< переменная основного языка>| <литерал>} <данные>
Описание
-
COUNT
– задает общее количество описателей динамических параметров в дескрипторе<имя дескриптора>
. Указанное значение не должно превышать количества описателей, для которых выделено место в дескрипторе при выполнении оператораALLOCATE DESCRIPTOR
. ЕслиCOUNT
превышает<количество описателей>
(см.ALLOCATE DESCRIPTOR
), на этапе выполнения программы будет фиксироваться ошибочная ситуация (ошибкаErrPCI_InvDescIdx
). -
<Номер параметра>
задает номер параметра в дескрипторе<имя дескриптора>
. Значение должно находиться в диапазоне от 1 до<количества описателей>
, где<количество описателей>
– количество объявленных описателей в дескрипторе<имя дескриптора>
.<Номер параметра>
может быть задан целочисленной константой или целочисленной переменной основного языка. Если<номер параметра>
больше значения<количества описателей>
или меньше 1, при выполнении возникает ошибкаErrPCI_DescSmall
. -
Каждому динамическому параметру в его описателе можно присвоить следующие атрибуты:
-
TYPE
– тип переменной основного языка, привязанной к данному параметру в дескрипторе (см. таблицу 8);EXEC SQL SET DESCRIPTOR DSC VALUE 1 TYPE =PCC_CHR_TYP; /* тип задан непосредственно */ type = PCC_CHR_TYP; EXEC SQL SET DESCRIPTOR DSC VALUE 1 TYPE = :type; /* тип задан переменной основного языка */
-
LENGTH
– длина переменной основного языка, привязанной к данному параметру в дескрипторе. Длину параметра можно установить равной нулю. В этом случае при привязке значения (DATE) длина будет определена автоматически по типу привязываемой переменной и ее фактическому значению на момент привязки (дляCHAR
,BIT
–strlen()
; дляVARCHAR
,VARBIT
– значение поляlen
). Последующая операцияGET DESCRIPTOR VALUE LENGTH(RETURNED_LENGTH)
дает фактическую длину привязанного параметра.EXEC SQL SET DESCRIPTOR DSC VALUE 1 LENGTH = 32; /* длина задана непосредственно */ /* длина задана переменной основного языка и установлена в неопределенное значение. */ /* Фактическая длина параметра будет определена в момент привязки данных.*/ len = 0; EXEC SQL SET DESCRIPTOR DSC VALUE 1 LENGHT = :len;
-
PRECISION
– точность числа типаNUMERIC
(не используется; зарезервировано для будущего использования); -
SCALE
– масштаб числа типаNUMERIC
(не используется; зарезервировано для будущего использования); -
NULLABLE
– признак допустимости NULL-значений (0 – столбец таблицы допускает NULL-значение, не ноль – NULL-значения не допускаются). Если NULL-значение недопустимо, то при получении его в процессе исполнения предложения SQL возникает ошибкаErrPCI_NullProhibited
; -
DATA
– задает значение параметру предложения SQL. Перед присвоением значения необходимо инициализировать атрибутыTYPE
иLENGTH
в соответствии с типом и длиной привязываемой переменной основного языка (непосредственных данных).Если атрибут
DATA
содержит непосредственно данные или переменную типаPCC_DAT_TYP
, то они копируются во внутренний буфер описателя. ЕслиDATA
содержит переменную основного языка, то в описателе сохраняется ее адрес. Копирование данных в этом случае не производится; -
непосредственно присвоить значение параметру типа
VARCHAR
,VARBIT
нельзя. При выполнении возникнет ошибкаErrPCI_IncTyp
./* данные заданы непосредственно */ EXEC SQL SET DESCRIPTOR DSC VALUE 1 DATA = ‘sample_data’; EXEC SQL SET DESCRIPTOR DSC VALUE 1 DATA = :s; /* данные заданы переменной основного языка */
-
INDICATOR
– задает значение индикаторной переменной. Для привязки NULL-значения во входном параметре необходимо установить значение -1.
-
-
Входной дескриптор считается полностью описанным, если заданы атрибуты
LENGTH
,TYPE
,DATA
для всех точек входа. Если хотя бы одно из этих значений не установлено в описателе параметра, то фактическим значением параметра станет NULL-значение, и при исполнении будет выдано предупреждениеErrPCI_NotBind
. -
<Имя дескриптора>
, указанное в конструкции<присвоить значение дескриптору>
, должно ссылаться на дескриптор, инициализированный ранее (ALLOCATE DESCRIPTOR
). -
Тип данных переменной, указанной в атрибуте
DATA
, должен соответствовать типу данных и длине описателя, указанного в<номере описателя параметра>
.