暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

oracle 用COPY命令复制表

原创 不吃草的牛_Nick 2023-04-27
875

用COPY命令复制表
在大表中,由于Oracle不在插入中间进行提交,而且,撤销段可能空间岀超,因此,使用CREATE TABLE AS SELECT(CTAS)技术会遇到麻烦。在使用此技术时也可能受限于non-LONG数据类型。使用COPY命令,可以将查询数据复制到同一数据库或远程数据库的一个表中。COPY命令提供了复制所有类型表的一种简单方法,因为在它从源表中复制数据时不进行任何提交,所以避免了使用CTAS技术的许多问题。

以下是SQL COPY命令的语法:
SQL> copy
usage: COPY FROM <db> TO <db> <opt> <table> { (<cols>) } USING <sel>
<db> : database string, e.g., hr/your_password@d:chicago-mktg
<opt> : ONE of the keywords: APPEND, CREATE, INSERT or REPLACE
<table>: name of the destination table
<cols> : a comma-separated list of destination column aliases
<sel> : any valid SQL SELECT statement
A missing FROM or TO clause uses the current SQL*Plus connection.

如果FROM或TO子句被省略了,则使用当前的SQL*Plus连接。关键参数是opt,它可以指定以下内容之一。
 APPEND:将记录插入到目标表中并创建此表(如果此表不存在的话);
 CREATE:创建目标表并插入行:
 INSERT:将行插入一个已有表中;
 REPLACE:删除已有表,重建此表,并给此表装载数据。

USING <sel> 子句指定确定从目标表中复制的行和列的査询。

提示 如果一个表由一个LONG列组成,则不能使用CTAS方法复制表,但可用COPY命令复制该表.

使用COPY命令。请注意,连字符(-)是“继续”字符,它可以将长SQL语句分成若干行。要确保在第一行之后使用继续字符且不要按Enter键!
COPY FROM sysadm/sysadml@finance1-
CREATE test01 -
USING SELECT * FROM employee;

可通过增加SQL*Plus的参数ARRAYSIZE、COPYCOMMIT,LONG的值,使COPY命令的执行速度更快。

当在同一个服务器上将一个表的数据拷贝到另一个表时,使用CREATE TABLE AS SELECT方法的拷贝速度通常比用COPY命令的速度快,因为使用COPY命令在将数据拷贝到表之前先要将数据从服务器拷贝到客户机的SQL*Plus界面,显然这增加了开销,所以相比从服务器直接拷贝到相同服务器COPY命令要花费更长的处理时间。


「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论