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

Назначение

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