当前位置: 首页 > 图文教程 > 数据库 > Oracle > 利用SQL * Plus复制遗留的Oracle数据表

Oracle
Oracle数据库技术(32)
Oracle数据库技术(33)
Oracle数据库技术(34)
Oracle数据库技术(35)
Oracle数据库技术(36)
Oracle数据安全面面观
Oracle数据操作和控制语言详解
Oracle数据库数据对象分析
解析Oracle 8i/9i的计划稳定性
使用Oracle实现实时通信
Oracle数据库中索引的维护
Oracle数据库游标使用大全
Oracle9i中监视索引的使用
在Oracle9i中使用多种Block Size
监控Oracle数据库的常用shell脚本
Performance Improvement Tips for Oracle on UNIX
Raw Partitions and Windows NT
How to use OS commands to diagnose Database Performance issues?
Raw Devices and Oracle - 20 Common Questions and Answers
Monitor Oracle Resource Consumption in UNIX

利用SQL * Plus复制遗留的Oracle数据表


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-10-31   浏览: 54 ::
收藏到网摘: n/a

    你可能运行的是Oracle 10g Release 2数据库服务器,但是需要支持某些应用程序可能是很早之前写好的。在Oracle 8i之前的版本创建的数据表常用LONG数据类型来存储大型文本。

    随着Large Object(LOB)数据类型的引入,LONG和LONG RAW数据类型就被抛弃了。如果你要复制使用了LONG数据类型的数据表,那么使用CREATE TABLE AS SELECT语法将不能完成任务,这时将会返回错误:ORA-00997: illegal use of LONG 数据类型。

    你可以导出该表然后再导入它,但是这样要做大量的工作。SQL*PLUS中的COPY命令仍旧可以使用一条命令来完成对此类数据表的复制。下面是使用COPY命令的格式(注意使用短线“-”来换行):

COPY FROM user/pw@dblink TO user/pw@dblink CREATE tablename -
USING select-statement;

    不过在Oracle 8.0版本COPY命令的功能被冻结,因为它只能复制有下列数据类型组成的数据表:CHAR,DATE,LONG,NUMBER和VARCHAR2。在8i版本中增加了新的数据类型而后者不支持,这完全是一个继承的方法。

列表A中演示了使用CREATE TABLE时的错误和成功使用COPY命令的方法。

SQL> CREATE TABLE my_views AS
  2     SELECT * FROM user_views;
   SELECT * FROM user_views
          *
ERROR at line 2:
ORA-00997: illegal use of LONG datatype



SQL> SET LONG 100000
SQL> COPY FROM hr/hr@orcl CREATE my_views -
>USING select * from user_views;

Array fetch/bind size is 15. (arraysize is 15)
Will commit when done. (copycommit is 0)
Maximum long size is 100000. (long is 100000)
Table MY_VIEWS created.

   1 rows selected from hr@orcl.
   1 rows inserted into MY_VIEWS.
   1 rows committed into MY_VIEWS at DEFAULT HOST connection.

SQL> descmy_views;
 Name                                      Null?    Type
 ----------------------------------------- -------- ----------------------------
 VIEW_NAME                                 NOT NULL VARCHAR2(30)
 TEXT_LENGTH                                        NUMBER(38)
 TEXT                                               LONG
 TYPE_TEXT_LENGTH                                   NUMBER(38)
 TYPE_TEXT                                          VARCHAR2(4000)
 OID_TEXT_LENGTH                                    NUMBER(38)
 OID_TEXT                                           VARCHAR2(4000)
 VIEW_TYPE_OWNER               &