SQLPlus中的COPY指令学习

 最近看同事操作数据库,用到了copy命令,惊叹自己之前竟然不知道。赶紧看了一下,虽然这么命令很简单,但是确实是很有用。


首先看一下文档里的语法定义:
COPY {FROM database | TO database | FROM database TO database}{APPEND|CREATE|INSERT|REPLACE} destination_table [(column, column, column, ...)]USING query

下面对语法逐一说明:

1、DATABASE

database 对应以下的语法格式是:username[/password]@connect_identifier

注意:如果不加密码,则sqlplus会提示你输入密码。考虑到安全性,则应该不写密码。

2、FROM|TO子句

可以注意到,在这个语法里,FROM 和 TO 两个子句都是可以单独出现的(当然一起出现是最常见的情况)。当没有指定 FROM/TO 子句,则使用当前连接的数据库。

无论是 FROM 还是 TO 子句中连接的数据库,都不能是 SYSDBA 或 SYSOPER 权限的用户。

3、COPY类型

APPEND
--表存在则INSERT,不存在则CREATE
Inserts the rows from query into destination_table if the table exists. If destination_table does not exist, COPY creates it.

CREATE
--新建一个表,如果表存在则出错
Inserts the rows from query into destination_table after first creating the table. If destination_table already exists, COPY returns an error.

INSERT
--向表中插入记录
Inserts the rows from query into destination_table. If destination_table does not exist, COPY returns an error. When using INSERT, the USING query must select one column for each column in destination_table.

REPLACE
--无论表是否存在,均清空然后CREATE
Replaces destination_table and its contents with the rows from query. If destination_table does not exist, COPY creates it. Otherwise, COPY drops the existing table and replaces it with a table containing the copied data.

4、destination_table

注意指定目标表的同时,是可以指定其字段的,但是其字段数目和类型(如果已经存在)必须与后面的query中相一致,否则报错。

------------------------------------

下面举例说明:

SQL> COPY FROM HR/HR @HQ TO JOHN/kkk @WEST REPLACE WESTEMPLOYEES USING SELECT * FROM EMPLOYEES;

别的没什么可说的,但是要注意如果使用新建表的时候,新建的表的字段属性,都是与原表相同的。在一般的情况下这都是没有什么问题的,但是会有一种比较特殊的情况,就是例如:原始库的字符集为ZHS16GBK,而目标库的字符集为UTF-8,因为UTF-8中一个汉字占3个字节,而ZHS16GBK是2个。所以当原始库中的一个属性为varchar2(2)且为一个汉字的字段,就无法导入到UTF-8库中了,会报错:ORA-12899: value too large for column ...

遇到这种情况,建议修改原始库的字段属性,如果没有权限,则可以在目标库中手工建立一下表,将字段属性调整到合适,然后使用INSERT或者APPEND类型COPY。

另注:select * from nls_database_parameters; 查看字符集



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
SQL*Plus是Oracle数据库的命令行工具,它允许用户与数据库进行交互,并执行SQL语句和PL/SQL块。下面是一些学习SQL*Plus的笔记: 1. 安装和配置:首先,确保你已经安装了Oracle数据库。安装完成后,你可以通过在命令行窗口输入"sqlplus"命令来启动SQL*Plus。你还可以在SQL*Plus配置文件进行一些自定义设置,例如设置输出格式、定义别名等。 2. 登录和退出:在启动SQL*Plus后,你需要提供数据库的用户名和密码来登录。你可以使用以下命令进行登录: ``` sqlplus username/password@database ``` 登录成功后,你可以使用"exit"命令退出SQL*Plus。 3. 执行SQL语句:你可以在SQL*Plus执行各种SQL语句,例如查询数据、创建表、更新数据等。只需在命令行输入SQL语句,然后按下回车键即可执行。 4. 管理输出:你可以使用SQL*Plus提供的命令来管理输出结果的格式。例如,使用"SET PAGESIZE"命令设置每页的行数,使用"SET LINESIZE"命令设置每行的字符数,使用"SET FEEDBACK"命令控制是否显示执行结果的行数等。 5. 存储和执行脚本:你可以将一系列SQL语句保存在一个脚本文件,然后使用SQL*Plus执行该脚本。通过在命令行输入"@"符号,后跟脚本文件的路径,即可执行脚本。 6. 使用变量:SQL*Plus允许你定义和使用变量来存储和操作数据。你可以使用"DEFINE"命令定义变量,使用"ACCEPT"命令提示用户输入变量的值,使用"PRINT"命令显示变量的值等。 这些是SQL*Plus学习的一些基本笔记,希望对你有所帮助!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值