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

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