Удалить BLOB-данные

Назначение
 

Команда CBLB предназначена для удаления всех данных BLOB-столбца.

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

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

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

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

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

Имя поля Значение
NumChan Номер канала
Command "CBLB"
Node Имя ЛИНТЕР-сервера
RowCount Порядковый номер BLOB-столбца
Выходные данные

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

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

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

Команда CBLB удаляет BLOB-данные из указанного BLOB-столбца текущей записи канала. Если номер BLOB-столбца не задан, то поведение команды не определено.

 

Примечание

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

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

  • SELECT;

  • INSERT;

  • UPDATE.

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

Команда CBLB удаляет BLOB-данные полностью. После выполнения операции длина данных становится равной 0, тип BLOB-данных не изменяется.

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

Коды завершения
Код Описание
NORMAL Нормальное завершение
ERRSEQCOM Неправильная последовательность команд (команда CBLB подана вне контекста текущего запроса канала)
COLNOTBLOB Заданный столбец не является BLOB-столбцом
ERRVALRANGE Неправильный номер столбца
Пример формирования команды
#include < string.h >
#include < stdlib.h >
#include "inter.h"
L_LONG LinterCBLB(TCBL *pCBL)
   {
   memcpy(pCBL- >Command, "CBLB", 4);
   pCBL- >PrzExe &= ~Q_ASYNC;
   inter(pCBL, NULL, NULL, NULL, NULL);
   return pCBL- >CodErr;
   }
Пример использования запросов обработки BLOB-данных
#include < stdio.h >
#include < stdlib.h >
#include < string.h >
#include "inter.h"
#include "exlib.h"

#ifndef WINCE
int    main()
#else
int    exblob()
#endif
   {
   TCBL  CBLconnect;
   L_CHAR  Name_Pass[] = "SYSTEM/MANAGER8";
   L_CHAR  Node[] = "        ";
   L_WORD  Priority = 0;
   L_LONG PrzExe = M_EXCLUSIVE | Q_ENCODE | M_BINARY;
   L_LONG Err;
   L_CHAR  Buf[] = "Part of blob Part of blob Part of blob";

   memset(&CBLconnect,0,sizeof(TCBL));
   Err=LinterOPEN(&CBLconnect, Name_Pass, Node, Priority, PrzExe);
   if (Err != NORMAL)
     PrintError(&CBLconnect);
   printf("Connect to RDBMS Linter\n");

   if (LinterNotSelect (&CBLconnect, "create table OBJ(OBJ blob);") != NORMAL)
     PrintError(&CBLconnect);
   if (LinterNotSelect(&CBLconnect, "INSERT INTO OBJ  VALUES(NULL);") != NORMAL)
     PrintError(&CBLconnect);

   Err=LinterABLB (&CBLconnect, Buf, (L_WORD) strlen(Buf),1);
   if (Err != NORMAL)
     PrintError(&CBLconnect);
   printf("ABLB\n");

   Err=LinterSLCT (&CBLconnect, PrzExe, "select * from OBJ;", Buf, sizeof(Buf), NULL);
   if (Err != NORMAL)
     PrintError(&CBLconnect);
   printf ("seleted BLOB length=%ld\n", *(L_LONG  *) Buf);

   Err=LinterGBLB (&CBLconnect, 1, Buf, sizeof(Buf) - 1);
   if (Err != NORMAL)
     PrintError(&CBLconnect);
   printf("GBLB:\n");
   printf("\t%s\n", Buf);

   Err=LinterGBLB (&CBLconnect);
   if (Err != NORMAL)
     PrintError(&CBLconnect);
   printf("GBLB\n");

   if (LinterNotSelect (&CBLconnect, "drop table OBJ;") != NORMAL)
     PrintError(&CBLconnect);

   printf("End Example\n");

   return 0;
   }