从命令行将数据从csv文件加载到oracle表[关闭]
Posted
技术标签:
【中文标题】从命令行将数据从csv文件加载到oracle表[关闭]【英文标题】:Load data from csv file to oracle table from command line [closed] 【发布时间】:2014-02-12 06:58:17 【问题描述】:我尝试使用 sql loader。问题是表需要为空才能加载数据。有没有办法在不截断表的情况下上传数据。CSV 数据需要附加到表中。我使用的是 oracle 11克。
【问题讨论】:
表需要为空,数据需要追加到表中的数据,你不想截断?这似乎是相反的。您能否澄清您的问题并发布您的 SQL*Loader ctl 文件和使用的命令行。 我假设“表需要为空”是指INSERT
模式下的默认行为;其余的是指您想要发生的事情?准确显示您的命令正在做什么(包括控制文件)以及您得到的错误会很有帮助...
@ben 我的日志文件错误是 SQL*Loader-601:对于 INSERT 选项,表必须为空。表 EMP 上的错误
@AlexPoole 我的控制文件就像将数据 infile 'D:\data.txt' 加载到以 "," 结尾的表 emp 字段中,可选地用 '"' (id,name) 括起来
@jasim - 好的,那么我在回答中所说的适用。在您的控制文件中,在into table
之前添加append
。但是您应该编辑问题以包含您被要求提供的所有信息,不要将其添加为 cmets。
【参考方案1】:
SQL*Loader documentation 说:
在加载表时,可以使用
INTO TABLE
子句来 指定特定表的加载方法(INSERT
、APPEND
、REPLACE
或TRUNCATE
) 仅适用于该表。那个方法 覆盖全局表加载方法。全局表加载 默认情况下,方法是INSERT
,除非使用了不同的方法 在任何INTO TABLE
子句之前指定。
因此默认情况下,您的表加载将处于INSERT
模式,这确实要求表为空。
文档还解释了how to load data into a non-empty table;在您的情况下,您想保留现有数据:
追加 如果表中已经存在数据,则 SQL*Loader 会将新行附加到表中。如果数据尚不存在,则 只需加载新行。您必须拥有
SELECT
权限才能使用APPEND
选项。
所以你的控制文件需要这样写(如图in their example):
LOAD DATA
INFILE 'my_file.dat'
BADFILE 'my_file.bad'
DISCARDFILE 'my_file.dsc'
APPEND
INTO TABLE my_table
...
您还可以考虑将新的 CSV 数据用作 external table 并从中插入到您的真实表中,这可能更灵活一些。
【讨论】:
感谢这就是解决方案,我可以进行更多研究:-(以上是关于从命令行将数据从csv文件加载到oracle表[关闭]的主要内容,如果未能解决你的问题,请参考以下文章
AWS DMS - Oracle 到 PG RDS 完全加载操作错误 - 无法从 csv 文件加载数据
使用 bq 命令行将文件从 GBQ 提取到没有 csv 标头的 GCS
如何将数据从单个 csv/excel 文件传输到多个 oracle 表