2011-06-01 26 views
19

我一直在寻找了一段时间,但似乎无法使这里找到答案去...甲骨文:导入CSV文件

我已经得到了我想要导入到表中的CSV文件在Oracle(9i/10i)中。

后来我打算将此表用作其他用途的查找。

这实际上是一个我正在处理的解决方法,因为使用IN子句查询1000个以上的值是不可能的。

这是如何使用SQLPLUS完成的?

谢谢你的时间! :)

+0

您应该使用联接而不是IN子句。 – MikeKulls 2013-07-18 03:48:01

+1

“您应该使用联接而不是IN子句。” ...您通过首先将csv导入到Oracle中来执行此操作。 – 2017-04-19 19:22:15

回答

18

SQL装载机帮助负载CSV文件导入表:SQL*Loader

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

+1

你说得对。一些更多的研究让我意识到SQL Loader是解决这个问题的方法。谢谢! – cr8ivecodesmith 2011-06-01 10:04:20

4

另一种解决方案是使用外部表:当你要经常和非常快速的做进口http://www.orafaq.com/node/848

使用此。

+0

感谢您的跟进。 :) – cr8ivecodesmith 2011-06-02 01:10:54

+0

另一个链接:http://www.orafaq.com/wiki/External_table – Vadzim 2014-10-23 17:06:42

20

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

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

只要打开表视图,然后:

  • 选择行动
  • 进口数据
  • 找到你的文件
  • 选择您的选项。

您可以选择让SQL Developer为您执行插入操作,创建SQL插入脚本或为SQL Loader脚本创建数据(本人未尝试使用此选项)。

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

只需向2个已经非常好的答案添加另一个选项即可。

+0

有关如何使用SQL Developer向导准备SQL Loader脚本和控制文件的详细文章:http://www.thatjeffsmith.com/archive/2012/08 /使用Oracle的-SQL显影剂到设置-SQLLOADER游程/ – Vadzim 2014-12-20 19:38:49

3

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

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用户名/ passwd文件@数据库名称控制= 例如:SQLLDR ABC/XYZ @ ORA控制= load.ctl

希望它能帮助。

0

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;