Добавить порцию BLOB-данных

Назначение
 

Команда ABLB предназначена для добавления заданной порции BLOB-данных.

Параметры вызова

inter(CBL, NULL, NULL, [CondBuf], RowBuf);

Входные данные

Входными данными являются:

  • контрольный блок CBL;

  • буфер записи RowBuf.

В контрольном блоке должны быть заполнены поля:

Имя поля Значение
NumChan Номер канала
Command "ABLB"
RowId Тип добавляемых данных
LnBufRow Длина буфера записи (размер добавляемой порции данных в байтах)
Node Имя ЛИНТЕР-сервера
RowCount Порядковый номер BLOB-столбца

Буфер записи RowBuf должен содержать добавляемую порцию BLOB-данных.

Выходные данные

Выходными данными является контрольный блок CBL.

В нем будут возвращены:

Имя поля Значение
CodErr Код завершения запроса к СУБД ЛИНТЕР
LnBufRow Фактическая длина буфера выборки данных
SysErr Код состояния ОС
Описание

Максимальный размер порции BLOB-значения – 16*4048 байт.

Максимальный размер BLOB-значения – 2 Гбайт.

Добавляемые данные помещаются в конец BLOB-значений.

При добавлении BLOB-данных СУБД ЛИНТЕР не контролирует тип добавляемых данных, поэтому, если добавляемые порции содержали разные типы BLOB-значения, то они все равно будут добавлены к BLOB-значению; окончательный тип BLOB-значения устанавливается по последней добавленной порции.

Команда ABLB добавляет порцию BLOB-данных к текущему BLOB-значению (BLOB-значению текущей записи выборки данных) в указанном BLOB-столбце записи.

Если номер BLOB-столбца не задан, то поведение команды не определено.

 

Примечание

Команда AOBJ, используемая для добавления порции BLOB-данных в запись с одним BLOB-столбцом (т.е. без указания номера BLOB-столбца), устарела и не рекомендуется для применения.

Текущей записью в канале является последняя выбранная, добавленная или измененная запись. Таким образом, команда ABLB имеет смысл только после выполнения следующих запросов:

  • SELECT;

  • INSERT;

  • UPDATE.

Запросы INSERT и UPDATE должны быть обновляемыми.

Команда ABLB не изменяет текущее положение записи в канале.

Коды завершения
Код Описание
NORMAL Нормальное завершение
ERRPARTBL Размер добавляемой порции больше 16*4048 байтов
EORR Превышен допустимый размер данных BLOB-столбца
ERRSEQCOM Неправильная последовательность команд (команда ABLB подана вне контекста текущего запроса канала)
COLNOTBLOB Заданный столбец не является BLOB-столбцом
ERRVALRANGE Неправильный номер столбца
Пример формирования команды
#include < string.h >
#include < stdlib.h >
#include "inter.h"

L_LONG LinterABLB(TCBL *pCBL, void *Out, L_WORD OutLen, L_WORD numCol)
   {
   memcpy(pCBL- >Command, "ABLB", 4);
   pCBL- >LnBufRow=OutLen;
   pCBL- >RowCount = numCol;
   pCBL- >RowId = 1;
   pCBL- >PrzExe &= ~Q_ASYNC;
   inter(pCBL, NULL, NULL, NULL, Out);
   return pCBL- >CodErr;
   }
Пример использования команды