Командный режим
Формат
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
.
Примеры
-
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
-
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;
-
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;
-
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;