2014-01-06 59 views
1

我使用批處理file.sql文本中運行這些命令:SQL削減數據,同時複製表

COPY FROM user/[email protected] TO user/[email protected] CREATE table1 (cl1,cl2,cl3) USING SELECT cl1,cl2,cl3 where ...; 
grant select on chema2.table1 to connect; 


DISCONNECT 
quit 
EXIT 

它複製表從一個數據庫Oracle 9到另一個數據。所有的作品都很好,但是奇怪的事情發生了,列cl2我只能得到39的長度。這個列的類型很長。任何想法在這裏有什麼不對?我怎樣才能改善這個表複製過程而不會丟失數據?

+1

這很令人驚訝。我認爲數據類型LONG和LONG RAW根本不被支持。是否有可能發生某種類型的隱式轉換? Sqlplus COPY命令是一個很好的功能,但不幸的是它有一些限制,Oracle聲明它不再支持(擴展)。 – ibre5041

+0

是的,這是一箇舊的數據庫,但我沒有選擇,我必須處理我有什麼。 – babboon

+0

我剛查過文檔:'COPY'只支持這些數據類型:CHAR DATE,LONG,NUMBER,VARCHAR2。也可以從Thomas Kyte門戶網站(與LONG/LOB副本有關的問題)引用:使用LONGS(不是LONG RAWS),您也可以使用sqlplus copy命令。 – ibre5041

回答

1

嘗試此查詢:

COPY FROM user/[email protected] to user/[email protected] 
INSERT TABLE1 (*) USING (SELECT * FROM TABLE1); 

如果你沒有TNS嘗試此查詢:

COPY FROM user/[email protected]//192.168.3.17:1521/DATABASE_SERVICE to user/[email protected]//192.168.4.17:1521/DATABASE2_SERVICE 
INSERT TABLE1 (*) USING (SELECT * FROM TABLE1); 

也許這個查詢可以給你移動ORA 8i和9i中的ora之間數據的一些線索

CREATE TABLE tab1 (id NUMBER, long_col LONG); 
CREATE TABLE tab2 (id NUMBER, clob_col CLOB); 
INSERT INTO tab2 SELECT id, TO_LOB(long_col) FROM tab1; 
+0

不幸的是,它也會削減數據。 – babboon

+0

也許它與不同的Oracle有關。我的意思是一個是甲骨文9另一個是甲骨文8. – babboon

+0

什麼是從一個數據庫複製到另一個替代? – babboon