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