Присвоение значений дескриптору
Назначение
Описание фактических значений параметров динамического запроса и присвоение входным параметрам в дескрипторе требуемых значений для последующего использования в динамических 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
, должен соответствовать типу данных и длине описателя, указанного в< номере описателя параметра >
.