利用SQL *Plus复制遗留的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 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         VARCHAR2(30)
VIEW_TYPE               VARCHAR2(30)
SUPERVIEW_NAME          VARCHAR2(30)
SQL> spool off

列表A

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

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索命令
, long
, 数据类型
, varchar2
, 数据表
create
oracle导出数据表、oracle备份数据表、oracle创建数据表、oracle数据表变化监控、oracle 数据表迁移,以便于您获取更多的相关知识。

时间: 2024-08-29 03:37:11

利用SQL *Plus复制遗留的Oracle数据表的相关文章

如何查看Oracle数据表的建表语句

oracle|数据|语句 如何查看Oracle数据表的建表语句? 系统环境:  1.操作系统:Windows 2000 Server,机器内存128M 2.数据库: Oracle 8i R2 (8.1.6) for NT 企业版 3.安装路径:C:\ORACLE 实现步骤:  1.用EXP工具导出 2.导入时使用show=y选项.log选项 3.查看.编辑日志文件 具体实例:  1.调出SQL*Plus conn system/manager grant connect,resource to

如何查看Oracle数据表的建表语句?

oracle|数据|语句 如何查看Oracle数据表的建表语句? 系统环境:  1.操作系统:Windows 2000 Server,机器内存128M 2.数据库: Oracle 8i R2 (8.1.6) for NT 企业版 3.安装路径:C:\ORACLE 实现步骤:  1.用EXP工具导出 2.导入时使用show=y选项.log选项 3.查看.编辑日志文件 具体实例:  1.调出SQL*Plus conn system/manager grant connect,resource to 

Oracle 数据表分区的策略_oracle

正在看的ORACLE教程是:Oracle 数据表分区的策略.本文描述通过统计分析出医院信息系统需分区的表,对需分区的表选择分区键,即找出包括在你的分区键中的列(表的属性),对大型数据的管理比较有意义, 本文的工作在Oracle8.1.6下实现. Oracle虽然是一个大型的DBMS,但如果不对记录比较多的表进行处理,仍然发挥不了Oracle管理大型数据的强大功能,因此对某些表进行分区,具有如下优点:  分区表中每个分区可以在逻辑上认为是一个独立的对象:  可以在一个表中的一个或多个分区上进行如删

Oracle数据表分区的策略_oracle

正在看的ORACLE教程是:Oracle数据表分区的策略.本文描述通过统计分析出医院信息系统需分区的表,对需分区的表选择分区键,即找出包括在你的分区键中的列(表的属性),对大型数据的管理比较有意义, 本文的工作在Oracle8.1.6下实现. Oracle虽然是一个大型的DBMS,但如果不对记录比较多的表进行处理,仍然发挥不了Oracle管理大型数据的强大功能,因此对某些表进行分区,具有如下优点: 分区表中每个分区可以在逻辑上认为是一个独立的对象: 可以在一个表中的一个或多个分区上进行如删除.移

mysql-使用navicat premium打开oracle数据表时提示“内部缓冲区字符太长”

问题描述 使用navicat premium打开oracle数据表时提示"内部缓冲区字符太长" 使用navicat premium打开oracle数据表时提示"内部缓冲区字符太长",但在plsql里面是正常的: 使用navicat premium"数据传输"功能将oracle数据表导入到mysql时,oracle中number类型在mysql中默认为保留小数点后30位..怎样才能设置成不保留小数点呢不知道是怎么回事,求大神指教~~ 解决方案 直接

sqoop将oracle数据表导入hive中文乱码问题

问题描述 sqoop将oracle数据表导入hive中文乱码问题 请教各位大神一个问题,就是将oracle的表导入到hive后中文乱码,oracle库的编码格式为US7ASCII,各位大神有没有遇到过类型的问题,或者有没有好的解决方案建议,谢谢了.附注:现在已经试过convert(nsrdzdah,'utf8','US7ASCII'),但是还是乱码:还有就是修改hive jdbc jar包,感觉不靠谱就没有试 解决方案 此问题已经解决 参考 http://www.aboutyun.com/hom

oracle数据表的设计问题

问题描述 oracle数据表的设计问题 现在是一名初级的java编程人员,接触的项目是用oracle数据库,但是对于oracle中建表的指令,知识有限,希望大神们能给予知道,比如授权了,表的级联关系等等,谢谢了

怎样用 datgridview 更新oracle数据表

问题描述 怎样用datgridview更新oracle数据表,最好有代码.谢谢了 解决方案 解决方案二:ding

sql语句-通过程序读取oracle数据时,小数位数总是多一位

问题描述 通过程序读取oracle数据时,小数位数总是多一位 我在oracle中写了一个求数据集的sql语句,得到的数据都是保留三位小数,但是通过程序得到的DataTable,所有数据多了一位.这是为什么呀?如:本来在数据库里取出来是0.067,但是从程序里出来后就变成了0.0670,后面会多一位小数位,怎么去掉呢? 解决方案 看看数据库是不定长的数据类型,小数后保留的是4位. 解决方案二: 保留三位小数只是运算的精度.存储的精度关键看字段类型,字段类型是4位就算你保留零位小数结果还是4位. 你