在一个数据文件中批量加载到Oracle中的所有表

在一个数据文件中批量加载到Oracle中的所有表,oracle,Oracle,我想将大量数据加载到Oracle数据库中。我已经写了一个程序来轻松格式化我的数据,但我想。我看到许多将csv文件加载到Oracle的示例,但它们都需要每个表都有一个控制文件,并将其链接到一个文件 创建一个脚本来生成所有控制文件对我来说很简单,但是我首先想知道是否可能将所有数据都放在一个文件中,并在数据文件中指定表名 例如: onefile.csv: ------------ details 1, John, john@gmail.com 2, Steve, steve@gmail.com 3,

我想将大量数据加载到Oracle数据库中。我已经写了一个程序来轻松格式化我的数据,但我想。我看到许多将csv文件加载到Oracle的示例,但它们都需要每个表都有一个控制文件,并将其链接到一个文件

创建一个脚本来生成所有控制文件对我来说很简单,但是我首先想知道是否可能将所有数据都放在一个文件中,并在数据文件中指定表名

例如:

onefile.csv:
------------
details
1, John, john@gmail.com
2, Steve, steve@gmail.com
3, Sally, sally@gmail.com
account
1, John, johntheman, johnh43
2, Steve, password, steve.12
3, Sally, letmein, slllya2

免责声明:这是一个完全虚构的数据库设计,完全不反映我在现实世界中如何存储用户数据。

您可以使用UTL_文件读取CSV。这将使您能够完全控制如何处理其内容。但这确实意味着您将浪费大量的时间和精力来手工实现一个简单而缓慢的SQL*Loader。你为什么要这么做


每个数据源和/或目标一个文件是CSV生成的公认惯例。这是合同的必要组成部分。如果我们还想做其他事情,那么我们需要使用更合适的协议,比如XML或JSON,一些能够支持编程查询的东西

为什么不使用SQLLdr?请参阅SQLdr。请参阅“区分不同的输入记录格式”

使用多个INTO TABLE子句的好处

多个INTO TABLE子句使您能够:

将数据加载到不同的表中

从单个输入记录中提取多个逻辑记录

区分不同的输入记录格式

区分不同的输入行对象子类型

但您必须在每一行上指定表名(或其ID)。 SQLLrd在行级别工作,我担心它不支持节

因此,您可能需要将其更改为:

onefile.csv:
------------    
details,1, John, john@gmail.com
details,2, Steve, steve@gmail.com
details,3, Sally, sally@gmail.com
account,1, John, johntheman, johnh43
account,2, Steve, password, steve.12
account,3, Sally, letmein, slllya2

这看起来像是旧COBOL格式的翻版。

我认为这是不可能的。我不认为将多个表的源数据放在一个文件中是可能的。不过,作为补充说明,关于从非Oracle数据库源加载数据,您也可以使用外部表而不是sqlldr,根据您对数据所做的操作,它可能是有用的(您可以在插入到其他表、CTA查询等中使用它们,这是能够限制您加载的行的最大优势之一)