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, или максимальное число байтов,