Доступные версии документации

Присвоение значений дескриптору

Назначение

Описание фактических значений параметров динамического запроса и присвоение входным параметрам в дескрипторе требуемых значений для последующего использования в динамических SQL-запросах.

Синтаксис
 
<присвоить значение дескриптору>::=
EXEC SQL SET DESCRIPTOR <имя дескриптора>
 COUNT = :<переменная основного языка> | <литерал>
| VALUE <номер параметра>
 <описатель параметра> [, < описатель параметра> … ]
<описатель параметра>::=
{ TYPE
| LENGTH
| PRECISION
| SCALE
| NULLABLE
| INDICATOR
| DATA
} = :{< переменная основного языка>| <литерал>} <данные>
Описание
  1. COUNT – задает общее количество описателей динамических параметров в дескрипторе <имя дескриптора>. Указанное значение не должно превышать количества описателей, для которых выделено место в дескрипторе при выполнении оператора ALLOCATE DESCRIPTOR. Если COUNT превышает <количество описателей> (см. ALLOCATE DESCRIPTOR), на этапе выполнения программы будет фиксироваться ошибочная ситуация (ошибка ErrPCI_InvDescIdx).

  2. <Номер параметра> задает номер параметра в дескрипторе <имя дескриптора>. Значение должно находиться в диапазоне от 1 до <количества описателей>, где <количество описателей> – количество объявленных описателей в дескрипторе <имя дескриптора>. <Номер параметра> может быть задан целочисленной константой или целочисленной переменной основного языка. Если <номер параметра> больше значения <количества описателей> или меньше 1, при выполнении возникает ошибка ErrPCI_DescSmall.

  3. Каждому динамическому параметру в его описателе можно присвоить следующие атрибуты:

    • 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, BITstrlen(); для 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.

  4. Входной дескриптор считается полностью описанным, если заданы атрибуты LENGTH TYPE, DATA для всех точек входа. Если хотя бы одно из этих значений не установлено в описателе параметра, то фактическим значением параметра станет NULL-значение, и при исполнении будет выдано предупреждение ErrPCI_NotBind.

  5. <Имя дескриптора>, указанное в конструкции <присвоить значение дескриптору>, должно ссылаться на дескриптор, инициализированный ранее (ALLOCATE DESCRIPTOR).

  6. Тип данных переменной, указанной в атрибуте DATA, должен соответствовать типу данных и длине описателя, указанного в <номере описателя параметра>.

Заметили ошибку?
Выделите текст и нажмите Ctrl + Enter