从命令行将数据从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 子句来 指定特定表的加载方法(INSERTAPPENDREPLACETRUNCATE) 仅适用于该表。那个方法 覆盖全局表加载方法。全局表加载 默认情况下,方法是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表[关闭]的主要内容,如果未能解决你的问题,请参考以下文章

使用命令行将 csv 文件加载到大查询中时面临问题

AWS DMS - Oracle 到 PG RDS 完全加载操作错误 - 无法从 csv 文件加载数据

使用 bq 命令行将文件从 GBQ 提取到没有 csv 标头的 GCS

如何将数据从单个 csv/excel 文件传输到多个 oracle 表

将数据从 Web 托管的 CSV 加载到 Oracle 中?

使用Open Office从命令行将Excel电子表格的单个工作表导出为CSV