如何解决从命令行将CSV文件加载到Oracle数据库的新表中的简便方法,而无需指定列详细信息
我经常想将CSV快速加载到Oracle数据库中。 CSV(Unicode)位于具有Oracle InstantClient 19.5版本的计算机上,Oracle数据库的版本是18c。
我正在寻找一个命令行工具,它可以上传行,而无需我指定列结构。
我知道我可以将sqlldr
与.ctl
文件一起使用,但是随后我需要定义列类型,等等。我对工具感兴趣,该工具可以从中找出列属性CSV中的数据(或对所有列使用通用默认值)。
我必须提取的CSV始终包含一个标题行,该工具可以用来确定表中的适当列。
解决方法
从Oracle 12c开始,您可以在快速模式下使用sqlldr
,因此不需要任何控制文件。
从Oracle Database 12c开始,SQL Loader具有一个称为 快速模式,可以更快,更轻松地加载CSV文件。用 快速模式,无需为大多数CSV编写控制文件 您加载的文件。相反,您只需加载几个文件即可 SQL Loader命令行中的参数。
一个例子
想象一下我有一张这样的桌子
CREATE TABLE EMP
(EMPNO number(4) not null,ENAME varchar2(10),HIREDATE date,DEPTNO number(2));
然后创建一个如下所示的csv文件
7782,Clark,09-Jun-81,10
7839,King,17-Nov-81,12
我可以在快速模式下使用sqlldr:
sqlldr userid=xxx table=emp
您可以在本白皮书中了解有关快速模式的更多信息
,忘记有关在脚本文件中使用sqlldr的信息。最好的选择是使用外部表。这是一个带有sqlldr命令的create table语句,该语句将从目录中读取文件并将其存储为表。超级简单,真的很方便。
这里是一个例子:
create table thisTable (
"field1" varchar2(10),"field2" varchar2(100),"field3" varchar2(100),"dateField" date
) organization external (
type oracle_loader
default directory <createDirectoryWithYourPath>
access parameters (
records delimited by newline
load when (fieldname != BLANK)
skip 9
fields terminated by ',' optionally ENCLOSED BY '"' ltrim
missing field values are null
(
"field1","field2","field3","dateField" date 'mm/dd/yyyy'
)
)
location ('filename.csv')
);
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。