2012-09-03 48 views
0

我必須將數據庫遷移到另一個數據庫。我有一個dblink使它更容易。 知道我嘗試從表中複製colum評論和說明。問題是這個類型是一個CLOB。在新數據庫中,我使用VARCHAR2。 我使用了一種解決方法並創建了一個全局臨時表。Oracle CLOB到varchar2 over DBLINK

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

    insert into Comments Select id,description,comment from [email protected]; 

現在我有表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 [email protected] a; 

的問題是,它需要很長tooooooooooooo插入值。我開始了,30分鐘後沒有完成。

是否有一種快速的方法來獲取varchar2中的convert clobs並將它們插入到其他Oracle數據庫中的表中?

感謝您的幫助!

回答

2

複製你的臨時表中的所有列,那麼你不應該查詢主表:

CREATE GLOBAL TEMPORARY TABLE comments ON COMMIT PRESERVE ROWS 
    AS SELECT * FROM [email protected]; 

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

您的查詢可能需要花費大量的時間,因爲你正在做的內嵌在一個沒有索引的表連接(每個行需要全面掃描!)。

+0

謝謝,現在它工作的很棒! –