Выбрать главу

но завершается аварийно, поскольку 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. Этот объём памяти является измерительной