Командный режим

Формат
 BLOB {INSERT | CLEAR | APPEND | GET}
{ROWID=< rowid записи > [< имя пользователя >.]< имя таблицы >.< имя столбца >
|COLUMN=< номер столбца >}
[TYPE=< тип BLOB-данных >]{FILE=< имя файла > | < BLOB-значение >}
< BLOB-значение >:=непрерывная последовательность шестнадцатеричных цифр
< тип BLOB-данных >::=целочисленное значение
Назначение

Выполнение основных операций с BLOB-данными в командном режиме.

Описание

Команда CLEAR очищает BLOB-значение.

Команда APPEND добавляет порцию BLOB-данных в конец BLOB-значения.

Команда INSERT эквивалентна последовательности команд CLEAR и APPEND.

Команда GET извлекает BLOB-значение. В этой команде имя пользователя можно не указывать (выполняется обращение к таблице текущего пользователя).

Опция TYPE задает тип добавляемых BLOB-данных. Учитывается только при выполнении команды BLOB INSERT.

Если задана опция COLUMN, все операции с BLOB-данными применяются к указанному столбцу текущей записи последней DML-операции. Отсчет столбцов начинается с 1.

Если задана опция ROWID, все операции с BLOB-данными применяются к столбцу < имя столбца > в указанной в < rowid записи > записи последнего выполненного SQL-запроса (выборки). В этом случае, при необходимости, будет выполнен отдельный select-запрос для получения записи с указанным < rowid записи >.

В командах INSERT и APPEND параметр < имя файла > задает спецификацию файла содержащего добавляемые (в бинарном виде) BLOB-данные.

В команде GET параметр < имя файла > задает спецификацию файла, в который должны быть записаны (в бинарном виде) извлекаемые BLOB-данные. Если спецификация файла не задана, BLOB-данные будут извлекаться СУБД ЛИНТЕР в текстовом виде в стандартный выходной поток с помощью функции printf.

Имена пользователей, таблиц и столбцов в команде могут задаваться в двойных кавычках.

Если спецификация файла (путь и/или имя) содержат пробелы и/или символы кириллицы, то её необходимо обрамлять двойными кавычками, а двойные кавычки в именах – экранировать, например,

SQL > blob insert column=2 file="с:\Program files\Film.avi";
SQL >blob insert column=2 file="с:\Коллекция музыки\Группировка\"Ленинград\".mp3";

Для инициализации добавления BLOB-порций необходимо использовать NULL-значение, а не пустую строку.

Например,

1) в этом случае  будет добавлена порция BLOB-данных c предшествующим пробелом,
 т.е.  NBL1.SQL = < пробел > + NBL.SQL
username SYSTEM/MANAGER8
  create or replace table tbl(i int, b blob);
  insert into tbl values(1, '');
  blob append column=2 file=NBL.SQL;
  blob get rowid=1 system.TBL.B file=NBL1.SQL;

2) в этом случае добавленная и считанная порции BLOB-данных будут идентичными:
NBL1.SQL =  NBL1.SQL
username SYSTEM/MANAGER8
  create or replace table tbl(i int, b blob);
  insert into tbl values(1, NULL);
  blob append column=2 file=NBL.SQL;
  blob get rowid=1 system.TBL.B file=NBL1.SQL;

Данные в BLOB-файл добавляются порциями, максимальный размер – 16*4048 байт. Если добавляемое BLOB-значение превышает максимальный размер порции, то оно будет добавляться несколькими порциями. При работе в режиме autocommit после вставки каждой порции будет подана команда COMMIT.

Примеры
  1. username SYSTEM/MANAGER8
    create or replace table test(i int, bl1 blob, bl2 blob);
    insert into test(i,bl1,bl2) values(1,NULL,NULL);
    blob insert column=2 333333ABCD;
    blob append column=3 444444ABCD;
    select rowid, i, lenblob(bl1), getblob(bl1,1,5), lenblob(bl2), getblob(bl2,1,5)
     from TEST;
    blob clear rowid=1 system.TEST.BL1;
    blob append rowid=1 SYSTEM."TEST".bl2 ffffff;
    !blob 1:
    blob get rowid=1 system.TEST.BL1;
    !blob 2:
    blob get rowid=1 system.TEST.BL2;
    !blob to file "blob.txt" (8 bytes):
    blob get rowid=1 system.TEST.BL2 file=blob.txt;
    insert into test(i,bl1) values(2,NULL);
    !read blob from file:
    blob append column=2 file=blob.txt;
    !check blob value:
    blob get rowid=2 system.TEST.BL1;
    

    Результат работы примера:

    ROWID       I
     -----       -
    |          1|          1|          5| 33 33 33 AB CD|          5| 44 44 44 AB CD|
    blob 1:
    blob 2:
    444444ABCDFFFFFF
    
  2. create or replace table test_findrtf(b_rtf blob,b_pdf blob,b_doc
    blob,b_xls blob,b_ppt blob,b_ps blob);
    insert into test_findrtf values(NULL,NULL,NULL,NULL,NULL,NULL);
    
    blob insert column=1 file=1.rtf
    blob insert column=2 file=1.pdf
    blob insert column=3 file=1.doc
    blob insert column=4 file=1.xls
    blob insert column=5 file=1.ppt
    blob insert column=6 file=1.ps
    select * from test_findrtf;
    
  3. username SYSTEM/MANAGER8
    create or replace table test(i int, bl1 blob, bl2 blob);
    insert into test(i,bl1,bl2) values(1,NULL,NULL);
    !insert (1,1):
    blob insert column=2
    1
    11
    111
    abcd;
    !append (1,2):
    blob append column=3 222222ABCD;
    select rowid, i, lenblob(bl1), getblob(bl1,1,5), lenblob(bl2), getblob(bl2,1,5)
     from TEST;
    insert into test(i,bl1,bl2) values(2,NULL,NULL);
    !insert (2,1):
    blob insert column=2 333333ABCD;
    !append (2,2):
    blob append column=3 444444ABCD;
    select rowid, i, lenblob(bl1), getblob(bl1,1,5), lenblob(bl2), getblob(bl2,1,5)
     from TEST;
    !get blobs, row 1:
    select i, bl1, bl2 from TEST where rowid=1;
    blob get column=2;
    blob get column=3;
    !get blobs, row 2:
    select i, bl1, bl2 from TEST where rowid=2;
    blob get column=2;
    blob get column=3;
    !clear (1,1):
    blob clear rowid=1 system.TEST.BL1;
    !clear (2,2):
    blob clear rowid=2 system.TEST.BL2;
    select rowid, i, lenblob(bl1), getblob(bl1,1,5), lenblob(bl2), getblob(bl2,1,5)
     from TEST;
    !append (1,2):
    blob append rowid=1 SYSTEM."TEST".bl2
    000
    0001234;
    !insert (2,1):
    blob insert rowid=2 SYSTEM."TEST".bl1
    000012
    3456;
    select rowid, i, lenblob(bl1), getblob(bl1,1,5), lenblob(bl2), getblob(bl2,1,10)
     from TEST;
    !get blob (1,2):
    blob get rowid=1 SYSTEM."TEST".bl2;
    !get blob (2,1):
    blob get rowid=2 SYSTEM."TEST".bl1;
    
  4. create or replace table test(i int, bl1 blob, bl2 blob);
    insert into test(i,bl1,bl2) values(1,NULL,NULL);
    blob insert column=2 type=101 111111abcd;
    blob insert column=3 type=111 111111abcdef;
    insert into test(i,bl1,bl2) values(2,NULL,NULL);
    blob insert rowid=2 SYSTEM."TEST".bl1 type=201 111111abcd;
    blob insert rowid=2 SYSTEM."TEST".bl2 type=211 111111abcdef;