Вы здесь

dbms lob

Когда хранимая процедура Oracle извлекает из таблицы объект типа lob, Oracle на самом деле возвращает не его содержимое, а локатор lob (в объектной терминологии - дескриптор). Локатор используется совместно с набором из девяти специальных функций, с помощью которых хранимая процедура может манипулировать данными, хранящимися в столбце типа lob. Вот краткое описание этих функций:

dbms lob. read (локатор, длина, смеш,ение, буфер) - извлекает в буфер PL/SQL указанное количество байтов/символов из идентифицируемого локатором большого объекта, начиная с заданного смещения;

dbms lob.write (локатор, длина, смещение, буфер) - записывает находящееся в буфере PL/SQL указанное количество байтов/символов в идентифицируемый локатором большой объект, начиная с заданного смещения;

dbms lob.append (локатор!, локатор!) - добавляет все содержимое большого объекта, идентифицируемого вторым локатором, в конец большого объекта, идентифицируемого первым локатором;

dbms lob.erase (локатор, длина, смещение) - удаляет указанное количество байтов/символов из большого объекта, идентифицируемого локатором, начиная с заданного смещения; для символьных объектов на место удаленных данных записываются пробелы, а для двоичных объектов - нули;

dbms lob.copy {локатор!, локатор2, длина, смещение!, смещение) - копирует указанное количество байтов/символов большого объекта, идентифицируемого вторым локатором, начиная со второго смешения, в большой объект, идентифицируемый первым локатором, начиная с первого смещения;

dbms lob. trim {локатор, длина) - усекает большой объект, идентифицируемый локагором, до заданной длины (в байтах/символах);

dbms lob.substr {локатор, длина, смещение) - возвращает в виде текстовой строки указанное количество байтов/символов из большого объекта, идентифицируемого локатором, начиная с заданного смещения;

dbms lob. getlength {локатор) - возвращает в виде целого числа длину (в байтах/символах) большого объекта, идентифицируемого локатором;

dbms lob.compare {локатор], локатор2, длина, смещение], смещение2) - сравнивает указанное количество байтов/символов большого объекта, идентифицируемого первым локатором, начиная с первого смещения, и большого объекта, идентифицируемого вторым локатором, начиная со второго смещения; возвращает ноль, если заданные фрагменты объектов одинаковы, и ненулевое значение в противном случае;

dbms lob. instr {локатор, щаблон, смещение, /) - возвращает в виде целого значения позицию i-ro вхождения шаблона в большой объект, идентифицируемый локатором, начиная с заданного смещения.

Oracle накладьшает еще одно ограничение на обновление и модификацию больших объектов, выполняемые посредством описанных функций. Поскольку большие объекты чересчур громоздки, чтобы участвовать в транзакциях, Oracle обычно не блокирует их при выборке строки таблицы приложением или хранимой процедурой PL/SQL. Чтобы обновить большой объект, его сначала нужно явно заблокировать. Для этого в инструкцию select, возвращающую локатор lob, включается предложение for update. Вот фрагмент хранимой процедуры PL/SQL, которая извлекает из таблицы большой объект, содержащий текстовый документ, и обновляет 100 символов этого документа:

declare

lob CLOB;

textbuf varchar(255);

begin

/* Помещаем в буфер текст, подлежащий вставке */

/* Получаем локатор большого объекта и блокируем

этот объект для обновления */ select document lob into lob from documents where document id = 34218 for update;

/* Записываем в объект новые 100 байтов текста */

dbms lob.write(lob, 100, 500, textbuf);

commit; end;

 

Post new comment

Filtered HTML

  • Адреса страниц и электронной почты автоматически преобразуются в ссылки.
  • Разрешённые HTML-теги: <a> <em> <strong> <cite> <blockquote> <code> <ul> <ol> <li> <dl> <dt> <dd>
  • Строки и параграфы переносятся автоматически.

Plain text

  • HTML-теги не обрабатываются и показываются как обычный текст
  • Адреса страниц и электронной почты автоматически преобразуются в ссылки.
  • Строки и параграфы переносятся автоматически.
CAPTCHA
Этот вопрос задается для того, чтобы выяснить, являетесь ли Вы человеком или представляете из себя автоматическую спам-рассылку.
16 + 3 =
Решите эту простую математическую задачу и введите результат. Например, для 1+3, введите 4.