37

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

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

稍后我计划将此表用作其他用途的查找。

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

这是如何使用 SQLPLUS 完成的?

谢谢你的时间!:)

4

7 回答 7

29

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

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

于 2011-06-01T09:24:58.600 回答
27

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

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

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

  • 选择动作
  • 导入数据
  • 找到你的文件
  • 选择您的选项。

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

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

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

于 2012-09-12T15:10:42.303 回答
6

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

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

于 2011-06-01T19:43:01.393 回答
6

SQL 加载器是要走的路。我最近从一个 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= Ex : sqlldr abc/xyz@ora control=load.ctl

希望能帮助到你。

于 2016-06-01T10:53:44.637 回答
3

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

于 2012-11-17T18:59:30.380 回答
2

Oracle 18c您可以使用Inline External Tables

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

对于内联外部表,用于通过 CREATE TABLE 语句创建外部表的相同语法可以在运行时用于 SELECT 语句。在查询块的 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;
于 2018-03-02T21:31:32.993 回答
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(逗号分隔)文件将 csv 文件中的(APPEND)行添加到表中。文件有 , 字段之间的文本字段在文本之前和之后有 " CRITICAL: 如果最后一列为空,则在行尾有

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

祝你好运 !

于 2021-01-22T22:32:22.103 回答