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