如何将数据直接从 Excel 插入 Oracle 数据库

Posted

技术标签:

【中文标题】如何将数据直接从 Excel 插入 Oracle 数据库【英文标题】:How to insert data directly from Excel to Oracle Database 【发布时间】:2015-08-20 11:29:00 【问题描述】:

我想知道如何将数据从 Excel 插入 Oracle 意味着假设我有一个充满数据的工作表,我想将它们全部插入 Oracle 数据库。

我该怎么做?

提前致谢。

【问题讨论】:

你用的是什么工具?? Excel 2010 和 SQL*Plus 然后使用sql loader将数据从excel表加载到表orafaq.com/wiki/SQL*Loader_FAQ 我如何使用 sql loader? 发布 10 行您的 excel 数据,我将发布 sql* loader(.ctl) 文件。 【参考方案1】:

许多 Oracle IDE 都提供此功能。

Oracle SQL 开发人员:

从 CSV 导入新表或现有表 从 XLS/XLSX 文件导入新表或现有表 可以设置外部表或 SQL*Loader 会话以从分隔文件导入新表或现有表 提供用于自动化目的的命令行界面

我在谈论这些功能here。

【讨论】:

【参考方案2】:

您可以使用 sql loader,但如果您想要更强大的解决方案(特别是如果数据将直接在电子表格中修改),请查看 Oracle 中的外部表。您可以直接从电子表格构建数据库表,代码如下所示:

CREATE TABLE YOUR_SCHEMA.YOUR_TABLE
(
  ACCT_NO                   VARCHAR2(15 BYTE),
  PRODUCT_TYPE              VARCHAR2(50 BYTE),
  ORGINATION_DATE           VARCHAR2(20 BYTE),
  MATURITY_DATE             VARCHAR2(20 BYTE),
  FIXED_PERIOD_START_DATE   VARCHAR2(30 BYTE),
  FIXED_PERIOD_END_DATE     VARCHAR2(30 BYTE),
  ORIGINAL_LOAN_AMOUNT      NUMBER,
  CURRENT_BALANCE           NUMBER
)
ORGANIZATION EXTERNAL
  (  TYPE ORACLE_LOADER
     DEFAULT DIRECTORY YOUR_DIRECTORY
     ACCESS PARAMETERS 
       ( RECORDS DELIMITED  BY NEWLINE
         LOGFILE YOUR_DIRECTORY:'your_log.log'
         BADFILE YOUR_DIRECTORY:'your_bad.bad'
         FIELDS TERMINATED BY ','
         MISSING FIELD VALUES ARE NULL )
     LOCATION (YOUR_DIRECTORY:'your_file.csv')
  )

请注意,上面带有“您的”一词的任何内容都必须更改为您想要命名文件和目录的任何内容。另请注意,“YOUR_DIRECTORY”是您必须创建的实际数据库对象:

CREATE OR REPLACE DIRECTORY YOUR_DIRECTORY AS 'C:\workspaces\test\XL2ExternalTables'

【讨论】:

【参考方案3】:

尝试在 Excel 中创建插入查询(如果数据不是那么大): 喜欢: 在 AA1 单元格中写入:'INSERT INTO <TABLE> VALUES(' 然后来自不同单元格的相应值(即'A1,'+'B1,'...+')') 它将在 excel 中创建插入脚本。只需复制脚本并执行即可。 这些是示例查询,请根据您对 INSERT STATEMENT 的要求编写您自己的查询。

【讨论】:

【参考方案4】:

使用另存为选项将您的 excel 文件格式转换为 .csv 格式

将以下内容保存在 D 驱动器中 folder_name 文件夹下的扩展名为 .ctl 的文件中。在运行此 .ctl 之前,请确保该表应存在于您的架构中,并且其列名与您发布的图像中不同。并且列名应与 .ctl 文件的名称匹配(sc_id, 萨尔等)。列的数据类型应与 .csv 文件中的数据匹配。并且还要确保你的table 应该是empty 否则你应该在你的.ctl 文件中使用truncateappend 选项。

 LOAD DATA
    INFILE 'D:\folder_name\csvfile_name.CSV'
    BADFILE 'D:\folder_name\csvfile_name.BAD'
    DISCARDFILE 'D:\folder_name\csvfile_name.log'
    logfile 'D:\folder_name\csvfile_name.DSC'
    iNTO TABLE schema_name.table_name
    FIELDS TERMINATED BY ','
    TRAILING NULLCOLS

    (
    sc_id,
    sal,
    sc_cd1,
    coll,
    sc_cd2,
    bill_mas,
   sc_cd3,
   wk_sal,
   check_bill_month,
   check_sale_wk
    ) 

使用以下命令在 sql plus 中运行您的 .ctl 文件

sqlldr schema_name/password@databasename control=your control file path.

如果在将数据加载到表中时发生任何错误,这些将记录到 .log 文件中。了解更多关于sqlloader的信息请参考http://docs.oracle.com/cd/B10501_01/server.920/a96652/ch05.htm

【讨论】:

【参考方案5】:

请参考答案。 https://community.oracle.com/thread/2166713?start=0

我只是从上面的链接复制对我有用的方法

在 Oracle sql developer 中转到表 --> 选择导入数据 ---> 选择您的 excel 或 csv 文件 --> 它将显示列 --> 将数据导入表中。

【讨论】:

很有帮助。谢谢大佬! 很高兴它有帮助:)

以上是关于如何将数据直接从 Excel 插入 Oracle 数据库的主要内容,如果未能解决你的问题,请参考以下文章

在asp.net中如何对oracle数据库执行批量插入数据?

如何将 Excel 工作表中的行插入 SQL Server 2005 或 oracle

关于oracle in 的1000条限制

vb.net 如何读出excel,并把数据插入oracle数据库中。

请问如何将oracle数据库中的数据迁移到mysql数据库中? 谢谢

Oracle数据的批量插入