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

2016-01-29 14:43 2 1 收藏

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

【 tulaoshi.com - Oracle教程 】

你可能运行的是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版本中增加了新的数据类型而后者不支持,这完全是一个继承的方法。

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 100000SQL 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         VARCHAR2(30) VIEW_TYPE               VARCHAR2(30) SUPERVIEW_NAME          VARCHAR2(30)SQL spool off

列表A

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

(本文来源于图老师网站,更多请访问https://www.tulaoshi.com)

来源:https://www.tulaoshi.com/n/20160129/1494043.html

延伸阅读
下面介绍如何操作数据表中的数据。 向数据表中插入数据 1. 向导师信息表中插入数据 (1)在图7.19所示的快捷菜单中选择选项,出现如图7.21所示的界面。可以按照二维表格输入数据。 (2)单击 按钮可以查看输入的数据对应的SQL代码。 (3)数据输入完毕后,单击 按钮可以完成数据的插入。 (4)上述过程对...
Oracle关系型数据库管理系统是世界上流行的关系数据库,它是一个极其强大、灵活和复杂的系统,据说,在使用oracle时应有这样的思想,那就是在SQL中几乎可以实现任何一种想法。 下面向大家介绍使用SQL查两个Oracle数据表查询的相同数据的方法,笔者感到这两种方法执行效率高、使用方便。 第一种方法:利用操作符intersect in...
这篇文章里介绍了master数据库中两个非常有用但在SQL Server在线教科书中没有提到的存储过程。 这些系统过程对于处理以下任务非常方便,如判断使用的存储空间大小、行数、用户表索引等等。 第一个过程sp_MSForEachDB对于感兴趣的服务器上的每个数据库执行三条命令。 ◆@command1:第一个执行的命令 ◆@replacechar:用另一个占...
标签: MySQL mysql数据库
  在进行数据表检查或修补时,可以先将数据表锁定,可确保数据表的安全: mysqlLOCK TABLE tbl_name READ; mysqlFLUSH TABLES; 将数据表锁定后再进行检查或修补的工作。完成后再解除锁定: mysqlUNLOCK TABLES; //LOCK TABLE tbl_name READ表示要锁定成只读状态,在这个状态下用户只能读取数据表,不能写入。 LOCK TABLE tbl_name W...
SQL Server 2005 SP2为我们带来了vardecimal功能,当时针对decimail和numeric数据类型推出了新的存储格式--vardecimal。vardecimal存储格式允许 decimal和numeric数据类型的存储作为一个可变长度列。 这项功能使得原来定长的decimal数据在数据文件中以可变长的格式存储,据称这项功能可以为典型的数据仓库节省30%的空间,而SQL Server 2008在这...

经验教程

488

收藏

63
微博分享 QQ分享 QQ空间 手机页面 收藏网站 回到头部