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

lob IN OUT NOCOPY CLOB/NCLOB CHARACTER SET ANY_CS,

open_mode IN BINARY_INTEGER

);

DBMS_L0B.0PEN(

b file IN OUT NOCOPY BFILE,

open_mode IN BINARY_INTEGER := DBMS_LOB.FILE_READONLY

);

где

■ lob это LOB, который нужно открыть;

■ b file является указателем на файл, который нужно открыть;

■ o p e n _m o d e указывает режим открытия; по умолчанию это DBMS_L0B.

FILE_READONLY. Это означает, что из L0B можно только читать; DBMS_

LOB. FILE_READWRITE означает, что для L0B можно выполнять операции

чтения и записи.

В следующей таблице перечислены исключения, создаваемые OPEN().

Исключение______ Создаётся в случае__________________ _______________________

VALUE_ERROR Любые из входных параметров равны NULL или неправильные.

READ()

Метод READ() читает данные в буфер из L0B. Есть три версии READ():

□ DBMS_LOB.READ(

lob IN BLOB,

amount IN OUT NOCOPY BINARY_INTEGER,

offs e t IN INTEGER,

buffer OUT RAW

); DBMS_L0B.READ(

lob IN CLOB/NCLOB CHARACTER SET ANY_CS,

amount IN OUT NOCOPY BINARY_INTEGER,

o ffs e t IN INTEGER,

buffer OUT VARCHAR2 CHARACTER SET lob%CHARSET

); DBMS_L0B.READ(

b file IN BFILE,

amount IN OUT NOCOPY BINARY_INTEGER,

o ffs e t IN INTEGER,

buffer OUT RAW

);

где

■ lo b это CLOB, NCLOB или BLOB, из которого нужно читать данные;

■ b file это BFILE, из которого нужно читать данные;

■ amount является максимальным числом символов, которые нужно

прочитать из CLOB/NCLOB, или максимальным числом байтов, которые

можно прочитать из BLOB/BFILE.

Большие объекты 517

■ o ffs e t является смещением, с которого нужно начать чтение (смещение

начинается с 1);

■ buffer является переменной, где хранятся данные, читаемые из L0B.

В следующей таблице перечислены исключения, создаваемые READ().

Исключение Создаётся в случае

VALUE_ERROR Любой из входных параметров равен NULL.

INVALID_ARGVAL Любое из условий:

■ amount < 1

■ amount > MAXBUFSIZE

■ amount > ёмкость буфера в байтах или символах

■ offset < 1

■ Offset > LOBMAXSIZE

N0_DATA_FOUND Достигнут конец LOB и больше нет байтов или символов для чтения из

L0B.

SUBSTR0

Метод SUBSTR( ) возвращает часть данных L0B, начиная со смещения и в

указанном количестве символов или байтов. Есть три версии SUBSTR():

□ DBMS_L0B.SUBSTR(

lob IN BLOB,

amount IN INTEGER := 32767,

o ffse t IN INTEGER := 1

) RETURN RAW;

DBMS_LOB.SUBSTR (

lob IN CLOB/NCLOB CHARACTER SET ANY_CS,

amount IN INTEGER ;= 32767,

o ffse t IN INTEGER := 1

) RETURN VARCHAR2 CHARACTER SET lob%CHARSET;

DBMS_L0B.SUBSTR (

b file IN BFILE,

amount IN INTEGER := 32767,

offse t IN INTEGER := 1

) RETURN RAW;

где

■ lob это BLOB, CLOB, или NCLOB, из которого необходимо читать данные;

■ b file является указателем на файл, из которого необходимо читать

данные;

■ amount является максимальным числом символов, которые нужно

прочитать из CLOB/NCLOB, или максимальным числом байтов, которые

нужно прочитать из BLOB/BFILE;

■ o ffse t является смещением, начиная с которого нужно читать данные

из L0B (смещение начинается с 1).

518 Глава 14

SUBSTR() возвращает

■ Данные R AW при чтении из BLOB/BFILE.

■ Данные VARCHAR2 при чтении из CLOB/NCLOB.

■ Null, если

■ amount < 1

■ amount > 32767

■ o ffs e t < 1

■ o ffse t > LOBMAXSIZE

В следующей таблице перечислены исключения, создаваемые

SUBSTR ( ) . __________________________________ _______________________

Исключение Создаётся в случае

VALUE_ERROR Любой из входных параметров равен NULL или неправильный.

UNOPENED_FILE BFILE не открыт.

NOEXIST_DIRECTORY Каталог не существует.

NOPRIV_DIRECTORY У вас нет привилегий на каталог.

INVALID_DIRECTORY Неправильный каталог

INVALID_OPERATION Файл существует, но у вас нет привилегий на доступ к файлу.

TRIM()

Метод TRIM( ) обрезает данные L0B до указанной длины. Есть две версии

TRIM():

П DBMS_L0B.TRIM(

lo b IN OUT NOCOPY BLOB,

newlen IN INTEGER

);

DBMS_LOB.TRIM(

lo b IN OUT NOCOPY CLOB/NCLOB CHARACTER SET ANY_CS,

newlen IN INTEGER

);

где

■ lob является тем BLOB, CLOB или NCLOB, который нужно обрезать;

и newlen является новой длиной (в байтах для B L O B , символах для

CLOB/NCLOB).

В следующей таблице перечислены исключения, создаваемые TRIM( ).

Исключение________Создаётся в случае________________ ._______________________

VALUE_ERROR Параметр lo b равен NULL.

invalid_argval Любое из условий:

■ newlen < О

■ newlen > LOBMAXSIZE________________________.___________

Большие объекты 519

WRITE()

Метод WRITEO записывает данные из буфера в L0B. Есть две версии

WRITE():

□ DBMS_LOB.WRITE(

lob IN OUT NOCOPY BLOB,

amount IN BINARY_INTEGER,

o ffse t IN INTEGER,

buffer IN RAW

);

DBMS_L0B.WRITE(

lob IN OUT NOCOPY CLOB/NCLOB CHARACTER SET ANY_CS,

amount IN BINARY_INTEGER,

o ffse t IN INTEGER,

buffer IN VARCHAR2 CHARACTER SET lob%CHARSET

);

где

■ lob это LOB, в который нужно записать данные;

■ amount представляет собой максимальное число символов, которые

необходимо записать в CL0B/NCL0B, или максимальное число байтов,