Oracle:导入CSV文件

时间:2011-06-01 09:19:05

标签: oracle csv import sqlplus sql-loader

我一直在寻找一段时间,但似乎无法找到答案,所以这里......

我有一个CSV文件要导入Oracle(9i / 10i)中的表。

稍后我打算将此表用作查找以供其他用途。

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

使用SQLPLUS如何完成?

感谢您的时间! :)

7 个答案:

答案 0 :(得分:21)

SQL Loader 有助于将csv文件加载到表中:SQL*Loader

如果你只想要sqlplus,那就有点复杂了。您需要找到sqlloader脚本和csv文件,然后运行sqlldr命令。

答案 1 :(得分:21)

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

有了它,您就可以从csv文件导入(其他分隔文件可用)。

只需打开表格视图,然后:

  • 选择行动
  • 导入数据
  • 找到您的文件
  • 选择您的选择。

您可以选择让SQL Developer为您执行插入操作,创建sql插入脚本,或者为SQL Loader脚本创建数据(我自己没有尝试过此选项)。

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

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

答案 2 :(得分:5)

另一种解决方案是使用外部表:http://www.orafaq.com/node/848

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

答案 3 :(得分:4)

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 userid / passwd @ DBname control = 例如:sqlldr abc / xyz @ ora control = load.ctl

希望它有所帮助。

答案 4 :(得分:3)

有人让我发布了the framework的链接!我在Open World 2012上发表的文章。这是一篇完整的博客文章,演示了如何使用外部表构建解决方案。

答案 5 :(得分:2)

Oracle 18c开始,您可以使用Inline External Tables

  

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

     

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

INSERT INTO target_table(time_id, prod_id, quantity_sold, amount_sold)
SELECT time_id, prod_id, quantity_sold, amount_sold
FROM   EXTERNAL (   
    (time_id        DATE NOT NULL,     
     prod_id        INTEGER NOT NULL,
     quantity_sold  NUMBER(10,2),
     amount_sold    NUMBER(10,2))     
    TYPE ORACLE_LOADER     
    DEFAULT DIRECTORY data_dir1
    ACCESS PARAMETERS (
      RECORDS DELIMITED BY NEWLINE
      FIELDS TERMINATED BY '|')     
   LOCATION ('sales_9.csv') REJECT LIMIT UNLIMITED) sales_external;

答案 6 :(得分:1)

我想分享 2 个技巧:(技巧 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 SQLLDR 将 csv 文件加载到表中]====

我使用 SQLLDR 和 csv(逗号分隔)文件将(APPEND)行从 csv 文件添加到表中。 该文件有,字段之间的文本字段在文本之前和之后具有“ 关键:如果最后一列为空,则行尾有一个 ,

csv 文件中的数据行示例:

11,"aa",1001
22,"bb',2002
33,"cc",
44,"dd",4004
55,"ee',

这是控制文件:

LOAD DATA
APPEND 
INTO TABLE MYSCHEMA.MYTABLE
fields terminated by ',' optionally enclosed by '"'
TRAILING NULLCOLS
(
CoulmnName1,
CoulmnName2,
CoulmnName3
)

这是在 Linux 中执行 sqlldr 的命令。如果您在 Windows 中运行,请使用 \ 而不是 /c:

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

祝你好运!