Oracle:导入CSV文件

Oracle:导入CSV文件,oracle,csv,import,sqlplus,sql-loader,Oracle,Csv,Import,Sqlplus,Sql Loader,我已经搜索了一段时间,但似乎找不到答案,所以这里是 我有一个CSV文件,我想导入到Oracle(9i/10i)中的表中 稍后,我计划将此表用作另一个用途的查找 这实际上是我正在研究的一个解决方法,因为使用IN子句查询超过1000个值是不可能的 如何使用SQLPLUS实现这一点 谢谢你抽出时间!:) SQL Loader帮助将csv文件加载到表中: 如果您只想要sqlplus,那么它会变得有点复杂。您需要找到sqlloader脚本和csv文件,然后运行sqlldr命令。另一种解决方案是使用外部表:

我已经搜索了一段时间,但似乎找不到答案,所以这里是

我有一个CSV文件,我想导入到Oracle(9i/10i)中的表中

稍后,我计划将此表用作另一个用途的查找

这实际上是我正在研究的一个解决方法,因为使用IN子句查询超过1000个值是不可能的

如何使用SQLPLUS实现这一点


谢谢你抽出时间!:)

SQL Loader帮助将csv文件加载到表中:


如果您只想要sqlplus,那么它会变得有点复杂。您需要找到sqlloader脚本和csv文件,然后运行sqlldr命令。

另一种解决方案是使用外部表:


当您必须经常且快速地执行此导入时,请使用此选项

您可以使用的另一个解决方案是SQL Developer

使用它,您可以从csv文件导入(其他分隔文件可用)

只需打开表视图,然后:

  • 选择行动
  • 导入数据
  • 找到你的文件
  • 选择你的选择
您可以选择让SQL Developer为您执行插入、创建SQL插入脚本或为SQL加载程序脚本创建数据(我自己没有尝试过此选项)

当然,如果您只能使用命令行,那么所有这些都是没有意义的,但是如果您能够使用SQLDeveloper在本地对其进行测试,则始终可以部署生成的插入脚本(例如)


只是在2个已经非常好的答案中添加了另一个选项。

有人让我发布一个链接到!我在2012年开放世界大会上介绍的。这是一篇完整的博客文章,演示了如何使用外部表构建解决方案。

SQL Loader是一种方法。 我最近从一个csv文件加载了我的表,这是一个新概念,我想和大家分享一个例子

LOAD DATA
    infile '/ipoapplication/utl_file/LBR_HE_Mar16.csv'
    REPLACE
    INTO TABLE LOAN_BALANCE_MASTER_INT
    fields terminated by ',' optionally enclosed by '"'
    (
    ACCOUNT_NO,
    CUSTOMER_NAME,
    LIMIT,
    REGION

    )

将控制文件和csv放在服务器上的同一位置。 找到sqlldr exe并对其进行开票

sqlldr用户ID/passwd@DBname控制= 示例:sqlldr abc/xyz@oracontrol=load.ctl


希望有帮助。

从Oracle 18c您可以使用:

内联外部表支持将外部表的运行时定义作为SQL语句的一部分,而无需在数据字典中将外部表创建为持久对象。

对于内联外部表,可以在运行时在SELECT语句中使用与使用CREATETABLE语句创建外部表相同的语法。在查询块的FROM子句中指定内联外部表。包含内联外部表的查询还可以包含用于连接、聚合等的常规表


我想分享两个技巧:(技巧1)创建csv文件(技巧2)将csv文件中的行加载到表中

==[(提示1)SQLPLUS从Oracle表创建csv文件]====

我将SQLPLUS与以下命令一起使用:

set markup csv on
set lines 1000
set pagesize 100000 linesize 1000
set feedback off 
set trimspool on
spool /MyFolderAndFilename.csv
Select *  from MYschema.MYTABLE  where MyWhereConditions ;
spool off
exit
=[提示2将csv文件加载到表中的SQLLDR]====

我使用SQLLDR和csv(逗号分隔)文件将csv文件中的行添加(追加)到表中。 文件中有,字段之间有,文本前后有 临界:如果最后一列为null,则在行尾有一个

csv文件中的数据行示例:

11,"aa",1001
22,"bb',2002
33,"cc",
44,"dd",4004
55,"ee',
这是控制文件:

加载数据
追加
进入表MYSCHEMA.MYTABLE
字段以“,”结尾,也可以用“,”括起
尾随零线
(
库曼那美1,
库曼那美2,
香豆蔻胺
)
这是在Linux中执行sqlldr的命令。如果在Windows中运行,请使用\而不是/c:

sqlldr userid=MyOracleUser/MyOraclePassword@MyOracleServerIPaddress:port/MyOracleSIDorService  DATA=datafile.csv  CONTROL=controlfile.ctl  LOG=logfile.log  BAD=notloadedrows.bad

祝你好运

你说得对。更多的研究让我意识到SQL加载器是解决这个问题的方法。谢谢您应该使用联接而不是IN子句。“您应该使用联接而不是IN子句。”。。。马修·沃森(Matthew Watson)在这里写了一篇非常详细的文章,介绍了如何使用SQL开发者向导来准备SQL加载器脚本和控制文件:非常好!这正是我想要的。非常感谢
sqlldr userid=MyOracleUser/MyOraclePassword@MyOracleServerIPaddress:port/MyOracleSIDorService  DATA=datafile.csv  CONTROL=controlfile.ctl  LOG=logfile.log  BAD=notloadedrows.bad