2014-01-06 58 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