Oracle CLOB в varchar2 через DBLINK

Мне нужно перенести базу данных на другую. У меня есть dblink, чтобы сделать это проще. Знаете, я пытаюсь скопировать комментарии и описание столбца из таблицы. Проблема в том, что тип - CLOB. В новой базе данных я использую VARCHAR2. Я использовал обходной путь и создал глобальную временную таблицу.

create global temporary table Comments
 (id number,description clob, comment clob) ON COMMIT PRESERVE ROWS; -

  insert into  Comments Select id,description,comment from database.test@DBLINK;

Теперь у меня 52K строк в таблице.

Теперь я хочу создать новый тест таблицы в новой базе данных.

CREATE TABLE "TEST"
(
"ID"             NUMBER(9,0) NOT NULL ENABLE,
"NAME"             VARCHAR2(255) ,
"DESCRIPTION"             VARCHAR2(4000) ,
"COMMENT"             VARCHAR2(4000) ,
CONSTRAINT "TEST_PK" PRIMARY KEY ("ID")
);

И теперь я пытаюсь вставить значения:

insert into TEST(ID, NAME,DESCRIPTION, COMMENT)
 select Test_seq.nextval,Name,
  (select dbms_lob.substr(DESCRIPTION, 4000, 1) from  Comments b where b.id =a.id),
(select dbms_lob.substr(COMMENT, 4000, 1) from  Comments b where b.id =a.id),
from database.test@DBLINK a;

Проблема в том, что для вставки значений требуется слишком много времени. Я начал, и через 30 минут он не закончился.

Есть ли быстрый способ преобразовать clobs в varchar2 и вставить их в таблицу в другой базе данных Oracle?

Спасибо за помощь!


person John Smithv1    schedule 03.09.2012    source источник


Ответы (1)


Скопируйте все столбцы во временную таблицу, тогда вы не должны запрашивать основную таблицу:

CREATE GLOBAL TEMPORARY TABLE comments ON COMMIT PRESERVE ROWS 
    AS SELECT * FROM test@db;

SELECT INTO TEST(ID, NAME,DESCRIPTION, COMMENT)
SELECT ID, NAME, 
       dbms_lob.substr(description, 4000, 1), 
       dbms_lob.substr(description, 4000, 1)
  FROM comments;

Ваш запрос, вероятно, занимает много времени, потому что вы выполняете встроенные соединения в таблице, которая не имеет индексов (каждая строка выполняет ПОЛНОЕ СКАНИРОВАНИЕ!).

person Vincent Malgrat    schedule 03.09.2012