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

Формат
 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;