но завершается аварийно, поскольку SQUPlus не может отобразить содержимое
BFILE:
□ SELECT *
FROM b f i l e _ c o n t e n t ;
SP2 -0 6 7 8 : Column o r a t t r i b u t e t y p e can not be d i s p l a y e d by SQL * P lu s
(S P 2 -0 6 7 8 : Тип с то л бца или а т р и б у та не может быт отображен в SQ L * P lu s )
Чтобы получить доступ к содержимому BFILE (или BLOB), вы можете использовать
PL/SQL. Далее вы узнаете, как это сделать.
Использование больших объектов в PL/SQL
В этом разделе вы узнаете, как использовать LOB в PL/SQL. Мы начнём
с исследования методов пакета DBMS_L0B, который поставляется вместе
Большие объекты 499
с базой данных. Далее вы увидите большое количество программ на PL/
SQL, которые показывают, как использовать методы DBMS_L0B для чтения
данных в L0B, копирования данных из одного L0B в другой, поиска данных
в L0B, копирования данных из файла в L0B, копирования данных из L0B в
файл, и многое другое.
В таблице 14.1 перечислены наиболее часто используемые методы пакета
DBMS_L0B.
Таблица 14.1 .Методы пакета DBMS_L0B
Метод Описание
АРРЕМР(целевой_1оЬ, ис-
ходный_1оЬ)
Добавляет содержимое исходного L0B в конец целевого
L0B.
CLOSE(noKaTop_lob) Закрывает ранее открытый L0B.
C0MPARE(lob1, 1оЬ2, ко-
лич, смещ1, смещ2)
Сравнивает данные, которые хранятся в 1оЬ1 и 1оЬ2, начиная
со смещ1 для 1оЫ и смещ2 для 1оЬ2. Смещения всегда начинают
отсчёт с 1, что является позицией первого символа
или байта данных.
Данные в L0B сравниваются для максимального числа символов
или байтов (максимум указан в колич).
CONVERTTOBLOB(dest_blob,
src_clob, amount, dest_
offset, src_offset, blob_
csid, lang_context,
warning)
Преобразует символьные данные, прочитанные из src_clob,
в двоичные данные, записанные в dest_blob.
Чтение начинается с src_offset для src_clob, а запись начинается
с dest offset в dest blob.
blob_csid является желаемым набором символов для преобразованных
данных, записанных в dest_blob. Обычно
требуется использовать DBMS_LOB.DEFAULT_CSID, который
является набором символов по умолчанию базы данных.
lang_context является языковым контекстом, который требуется
использовать при преобразовании символов, читаемых
из src_clob. Обычно требуется использовать DBMS_
LOB.DEFAULT_LANG_CTX, который является языковым контекстом
по умолчанию базы данных.
warning устанавливается в DBMS_LOB.WARI\l_
ll\ICONVERTIBLE_CHAR в случае, если встретился символ,
который нельзя преобразовать.
CONVERTTOCLOB (dest_clob, Преобразует двоичные данные, прочитанные из src_blob, в
src_blob, amount, dest_ символьные данные, записанные в dest_clob.
offset, src_offset, blob_
csid, lang_context,
warning)
500 Глава 14
Таблица 14.1. Методы пакета DBMS_L0B (продолжение)
Метод Описание
С0РУ(целевой_1оЬ, исход-
ный_1оЬ, колич, смещ_це-
левого, смещ_исходного)
CREATETEMPORARY(lob, кэш,
длительность)
ERASE(lob, колич, смещ)
FILECLOSE(bfile)
FILECL0SEALLO
FILEEXISTS(bfile)
FILEGETNAME(bfile, имя_
каталога, имя_файла)
FILEISOPEN(bfile)
FILEOPEN(bfile, режим_от-
крытия)
FREETEMPORARY(lob)
GETCHUNKSIZE(lob)
GET_STORAGE_LIMIT()
GETLENGTH(lob)
INSTR(lob, шаблон, смещ,
n)
ISOPEN(lob)
blob_csid является набором символов для данных, читаемых
из dest_blob. Обычно требуется использовать DBMS_
LOB.DEFAULT_CSID.
lang_context является языковым контекстом, который
требуется использовать при преобразовании символов,
записанных в src_clob. Обычно требуется использовать
DBMS_LOB.DEFAULT_LANG_CTX.
warning устанавливается в DBMS_LOB.WARN_
INCONVERTIBLE_CHAR в случае, если встретился символ,
который нельзя преобразовать.
Копирует исходный LOB в целевой LOB, начиная со смещений
в указанном количестве символов или байте
Создает временный LOB в табличном пространстве пользо-
-вателя по умолчанию.
Удаляет данные в LOB, начиная со смещения в указанном
количестве символов или байте.
Закрывает BFILE. Используйте более новый метод CLOSE()
вместо FILECL0SEO.
Закрывает все ранее открытые файлы BFILE.
Проверяет, существует ли файл на сервере.
Получает название каталога и имя внешнего файла, на который
указывает bfile.
Проверяет, открыт ли файл. Используйте более новый метод
ISOPEN() вместо FILEISOPEN().
Открывает bfile в указанном режиме, который можно установить
только в DBMS_LOB.FILE_READONLY. Это означает,
что из файла можно только читать (и нельзя записывать в
него). Используйте более новый метод OPEN() вместо
FILEOPEN().
Освобождает временный LOB.
Получает объем памяти, используемый при чтении и записи
данных, хранимых в LOB. Этот объём памяти является измерительной