LONG RAW в L0B.
Преобразование столбцов LONG и LONG RAW в LOB
Вы можете преобразовать LONG в CL0B при помощи функции T0_L0B(). Например,
следующее выражение преобразует L0NG_column в CL0B при помощи
T0_L0B() и сохраняет результаты в таблице clob_content:
□ INSERT INTO clob_content
SELECT 10 + id, T0_L0B(long_column)
FROM long_content;
2 rows created.
Вы можете преобразовать LONG RAW в BLOB при помощи функции Т0_
LOB (). Например, следующее выражение преобразует L0NG_raw_column в
BL0B при помощи T0_L0B() и сохраняет результаты в таблице blob_content:
□ INSERT INTO blob_content
SELECT 10 + id, T0_L0B(long_raw_column)
FROM long_raw_content;
2 rows created.
Вы также можете использовать выражение ALTER TABLE для прямого
преобразования столбцов LONG и LONG RAW. Например, следующее выражение
преобразует L0NG_column в CL0B:
□ ALTER TABLE long_content MODIFY (long_column CL0B);
Следующий пример преобразует L0NG_raw_column в BLOB:
□ ALTER TABLE long_raw_content MODIFY (long_raw_column BLOB);
Предупреждение Вам не следует изменять таблицы, которые используются рабочим приложением.
____________________
Как только столбец LONG или LONG RAW будет преобразован в L0B, вы
сможете использовать для доступа к L0B богатые методы PL/SQL, описанные
ранее.
Большие объекты 539
Усовершенствования L0B, появившиеся в базе данных
OraclelOg
В этом разделе описаны усовершенствования, произведенные над большими
объектами в базе данных OraclelOg:
■ неявное конвертирование объектов между типами CL0B и NCL0B,
■ применение атрибута :new при использовании L0B в триггерах.
Автор разместил сценарий SQUPlus по имени lob_schema2.sql в папке
SQL. Этот сценарий можно запустить в базе данных Oracle 10g и выше.
Сценарий создаёт пользователя по имени lob_user2 с паролем 1оЬ_
password, а также создаёт таблицы и код PL/SQL, которые используются в
этом разделе. После выполнения сценария вы будете загружены под пользователем
lob_user2.
Неявное конвертирование объектов из типа CL0B в NCL0B
В современном глобальном бизнес-окружении вы можете иметь дело с преобразованиями
между Unicode и национальным набором символов. Набор
Unicode является универсальным набором символов, который позволяет
вам сохранять текст, который можно преобразовать в любой язык; он делает
это путём присвоения уникального кода каждому символу, независимо
от языка. Национальный набор символов хранит текст на конкретном
языке.
В версиях базы данных, предшествовавших OraclelOg, можно было явно
конвертировать данные из Unicode в набор символов национального
языка (и обратно), используя функции Т0_СЮВ() и T0_NCL0B(). T0_CL0B()
позволяет вам конвертировать текст, который хранится в VARCHAR2,
NVARCHAR2, или NCL0B, в CL0B. Аналогично, T0_NCL0B() позволяет вам конвертировать
текст, который хранится в VARCHAR2, NVARCHAR2 или CL0B, в NCL0B.
В базе данных OraclelOg стало возможным неявное конвертирование
объектов из NCL0B в CL0B и обратно, что позволяет уйти от использования
функций T0_CL0B() и T0_NCL0B(). Можно использовать это неявное конвертирование
для переменных типов IN и OUT в операторах DML и запросах,
а также при назначении значений переменным и для параметров методов
PL/SQL.
Давайте рассмотрим пример. В следующем примере создается таблица
nclob_content, содержащая столбец nclob_column типа NCL0B:
□ CREATE TABLE nclob_content (
id INTEGER PRIMARY KEY,
nclob_column NCLOB
);
Процедура nclob_example() демонстрирует неявное преобразование
CLOB в NCLOB и наоборот:
П CREATE PROCEDURE nclob_example
AS
540 Глава 14
v_clob CLOB := ‘ I t is the east and Juliet is the sun’ ;
v_nclob NCLOB;
BEGIN
- вставим v_clob в nclob_column; это неявно
- преобразует CLOB v_clob в NCLOB, сохраняя
- содержимое v_clob в таблице nclob_content
INSERT INTO nclob_content (
id, nclob_column
) VALUES (
1, v_clob
);
- выберем nclob_column в v_clob; это неявно
- преобразует NCLOB, хранящийся в nclob_column, в
- CLOB, извлекая содержимое nclob_column
- в v_clob
SELECT nclob_column
INTO v_clob
FROM nclob_content
WHERE id = 1;
- отобразим содержимое _v_clob
DBMS_OUTPUT.PUT_LINEl'vlclob = ' || v_clob);
END nclob_example;
/
Следующий пример включает вывод на сервере и вызывает nclob_
example!):
□ SET SERVEROUTPUT ON
CALL nclob_example();
clob_var = I t is the east and Juliet is the sun
Применение атрибута :new при использовании LOB в триггерах
В базе данных Oracle 10g или выше при использовании LOB в триггерах
BEFORE UPDATE или BEFORE INSERT уровня строки можно использовать атрибут
:new. В следующем примере создается триггер before_clob_content_
update, выводящий при обновлении таблицы clob_content длину столбца
clob column. Обратите внимание на использование при доступе к clob_
column атрибута : new:
□ CREATE OR REPLACE TRIGGER before_clob_content_update