Добавить порцию 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;
}