`
cherryQQ
  • 浏览: 1133490 次
  • 性别: Icon_minigender_1
  • 来自: 厦门
社区版块
存档分类
最新评论

excel导入到oracle

阅读更多
-----------------------------------参数设置--------------------------------
  SQL*LOADER是ORACLE的数据加载工具,通常用来将操作系统文件迁移到ORACLE数据库中。SQL*LOADER是大型数据
仓库选择使用的加载方法,因为它提供了最快速的途径(DIRECT,PARALLEL)。现在,我们抛开其理论不谈,用实例来使
您快速掌握SQL*LOADER的使用方法。
  首先,我们认识一下SQL*LOADER。
  在NT下,SQL*LOADER的命令为SQLLDR,在UNIX下一般为sqlldr/sqlload。
  如执行:d:\oracle>sqlldr
SQL*Loader: Release 8.1.6.0.0 - Production on 星期二 1月 8 11:06:42 2002
(c) Copyright 1999 Oracle Corporation. All rights reserved.
用法: SQLLOAD 关键字 = 值 [,keyword=value,...]
有效的关键字:
userid -- ORACLE username/password
control -- Control file name
log -- Log file name
bad -- Bad file name
data -- Data file name
discard -- Discard file name
discardmax -- Number of discards to allow (全部默认)
skip -- Number of logical records to skip (默认0)
load -- Number of logical records to load (全部默认)
errors -- Number of errors to allow (默认50)
rows -- Number of rows in conventional path bind array or between direct p
ath data saves
(默认: 常规路径 64, 所有直接路径)
bindsize -- Size of conventional path bind array in bytes(默认65536)
silent -- Suppress messages during run (header,feedback,errors,discards,part
itions)
direct -- use direct path (默认FALSE)
parfile -- parameter file: name of file that contains parameter specification
s
parallel -- do parallel load (默认FALSE)
file -- File to allocate extents from
skip_unusable_indexes -- disallow/allow unusable indexes or index partitions(默
认FALSE)
skip_index_maintenance -- do not maintain indexes, mark affected indexes as unus
able(默认FALSE)
commit_discontinued -- commit loaded rows when load is discontinued(默认FALSE)
readsize -- Size of Read buffer (默认1048576)
PLEASE NOTE: 命令行参数可以由位置或关键字指定
。前者的例子是 'sqlload
scott/tiger foo';后者的例子是 'sqlload control=foo
userid=scott/tiger'.位置指定参数的时间必须早于
但不可迟于由关键字指定的参数。例如,
'SQLLOAD SCott/tiger control=foo logfile=log', 但
'不允许 sqlload scott/tiger control=foo log',即使允许
参数 'log' 的位置正确。
d:\oracle>
我们可以从中看到一些基本的帮助信息,这里,我用到的是中文的WIN2000 ADV SERVER。
  我们知道,SQL*LOADER只能导入纯文本,所以我们现在开始以实例来讲解其用法。
  一、已存在数据源result.csv,欲倒入ORACLE中FANCY用户下。
    result.csv内容:
  1,默认 Web 站点,192.168.2.254:80:,RUNNING
  2,other,192.168.2.254:80:test.com,STOPPED
  3,third,192.168.2.254:81:thirdabc.com,RUNNING
  从中,我们看出4列,分别以逗号分隔,为变长字符串。
  二、制定控制文件result.ctl
result.ctl内容:
load data
infile 'result.csv'
into table resultxt
(resultid char terminated by ',',
website char terminated by ',',
ipport char terminated by ',',
status char terminated by whitespace)
  说明:
  infile 指数据源文件 这里我们省略了默认的 discardfile result.dsc badfile result.bad
  into table resultxt 默认是INSERT,也可以into table resultxt APPEND为追加方式,或REPLACE
  terminated by ',' 指用逗号分隔
  terminated by whitespace 结尾以空白分隔
  三、此时我们执行加载:
D:\>sqlldr userid=fancy/testpass control=result.ctl log=resulthis.out
SQL*Loader: Release 8.1.6.0.0 - Production on 星期二 1月 8 10:25:42 2002
(c) Copyright 1999 Oracle Corporation. All rights reserved.
SQL*Loader-941: 在描述表RESULTXT时出现错误
ORA-04043: 对象 RESULTXT 不存在
  提示出错,因为数据库没有对应的表。
  四、在数据库建立表
  create table resultxt
(resultid varchar2(500),
website varchar2(500),
ipport varchar2(500),
status varchar2(500))
/
  五、重新执行加载
  D:\>sqlldr userid=fancy/k1i7l6l8 control=result.ctl log=resulthis.out
SQL*Loader: Release 8.1.6.0.0 - Production on 星期二 1月 8 10:31:57 2002
(c) Copyright 1999 Oracle Corporation. All rights reserved.
达到提交点,逻辑记录计数2
达到提交点,逻辑记录计数3
  已经成功!我们可以通过日志文件来分析其过程:resulthis.out内容如下:
SQL*Loader: Release 8.1.6.0.0 - Production on 星期二 1月 8 10:31:57 2002
(c) Copyright 1999 Oracle Corporation. All rights reserved.
控制文件: result.ctl
数据文件: result.csv
错误文件: result.bad
废弃文件: 未作指定
:
(可废弃所有记录)
装载数: ALL
跳过数: 0
允许的错误: 50
绑定数组: 64 行,最大 65536 字节
继续: 未作指定
所用路径: 常规
表RESULTXT
已载入从每个逻辑记录
插入选项对此表INSERT生效
列名 位置 长度 中止 包装数据类型
------------------------------ ---------- ----- ---- ---- ---------------------
RESULTID FIRST * , CHARACTER
WEBSITE NEXT * , CHARACTER
IPPORT NEXT * , CHARACTER
STATUS NEXT * WHT CHARACTER
表RESULTXT:
3 行载入成功
由于数据错误, 0 行没有载入。
由于所有 WHEN 子句失败, 0 行没有载入。
由于所有字段都为空的, 0 行没有载入。
为结合数组分配的空间: 65016字节(63行)
除绑定数组外的内存空间分配: 0字节
跳过的逻辑记录总数: 0
读取的逻辑记录总数: 3
拒绝的逻辑记录总数: 0
废弃的逻辑记录总数: 0
从星期二 1月 08 10:31:57 2002开始运行
在星期二 1月 08 10:32:00 2002处运行结束
经过时间为: 00: 00: 02.70
CPU 时间为: 00: 00: 00.10(可
  六、并发操作
  sqlldr userid=/ control=result1.ctl direct=true parallel=true
sqlldr userid=/ control=result2.ctl direct=true parallel=true
sqlldr userid=/ control=result2.ctl direct=true parallel=true
当加载大量数据时(大约超过10GB),最好抑制日志的产生:
  SQL>ALTER TABLE RESULTXT nologging;
这样不产生REDO LOG,可以提高效率。然后在CONTROL文件中load data上面加一行:unrecoverable
此选项必须要与DIRECT共同应用。
  在并发操作时,ORACLE声称可以达到每小时处理100GB数据的能力!其实,估计能到1-10G就算不错了,开始可用结构
相同的文件,但只有少量数据,成功后开始加载大量数据,这样可以避免时间的浪费。

  综上所述,SQL*LOADER的速成教程已经结束,条件分支等用法需要大家在日后工作中积累,我的观点是“用起来”,
然后再深造。兴趣是人类的第一教师,此话一点不错。始终让自己保持对技术的热情比埋头苦读更重要,技术的道路未必艰辛,
却是孤独的,能够忍受寂寞的人,才可能实现事业与人生的丰收。

SQLLOAD keyword=value [,keyword=value,...]

Valid Keywords:

userid -- ORACLE username/password
control -- Control file name
log -- Log file name
bad -- Bad file name
data -- Data file name
discard -- Discard file name
discardmax -- Number of discards to allow (Default all)
skip -- Number of logical records to skip (Default 0)
load -- Number of logical records to load (Default all)
errors -- Number of errors to allow (Default 50)
rows -- Number of rows in conventional path bind array or between direct s
(Default: Conventional path 64, Direct path all)
bindsize -- Size of conventional path bind array in bytes (Default 65536)
silent -- Suppress messages during run (header,feedback,errors,discards,par)
direct -- use direct path (Default FALSE)
parfile -- parameter file: name of file that contains parameter specificatios
parallel -- do parallel load (Default FALSE)
file -- File to allocate extents from
skip_unusable_indexes -- disallow/allow unusable indexes or index partitions ()
skip_index_maintenance -- do not maintain indexes, mark affected indexes as unu)
commit_discontinued -- commit loaded rows when load is discontinued (Default F)
readsize -- Size of Read buffer (Default 65535)

PLEASE NOTE: Command-line parameters may be specified either by
position or by keywords. An example of the former case is 'sqlload
scott/tiger foo'; an example of the latter is 'sqlload control=foo
userid=scott/tiger'. One may specify parameters by position before
but not after parameters specified by keywords. For example,
'sqlload scott/tiger control=foo logfile=log' is allowed, but
'sqlload scott/tiger control=foo log' is not, even though the
position of the parameter 'log' is correct.
--------------------------------上面参数设置------------------------------------------------------下面具体步骤----------------------------------

有两种思路:
一.采用JExcelAPI或apache POI来读取Excel中的每行记录,通过程序插入以数据库中;  (
可参考http://blog.csdn.net/pengchua/archive/2007/08/09/1733591.aspx)

二.将Excel转化成.csv格式,然后利用Oracle中的sqlldr命令成批导入,具体步骤如下:
1.采用XL2ExternalTables,apache POI 将Excel数据转化为csv格式
测试方法之一: 
注意:要将ExternalTableGenerator类中的方法改为public就行了
import java.io.FileInputStream;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.poifs.filesystem.POIFSFileSystem;

public class Test {

public static void getCSV(String spreadsheet) {

  String sheet = spreadsheet.substring(spreadsheet.lastIndexOf("/"));
  POIFSFileSystem fs;
  HSSFWorkbook wb;
  try {
   fs = new POIFSFileSystem(new FileInputStream(spreadsheet));
   //绝对路径
   wb = new HSSFWorkbook(fs);
   ExternalTableGenerator generator generator = new ExternalTableGenerator(sheet);
   //文件名
   generator.processWorkook(wb);
   //要将ExternalTableGenerator类中的方法改为public就行了

  } catch (Exception e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  }

}

public static void main(String args[]) {

  getCSV("C:/Documents and Settings/XXXX/workspace/Test/test.xls");
}
}

测试方法之二:
java -cp XL2ExternalTables.jar;jakarta-poi-1.5.1-final-20020615.jar;jakarta-poi-contrib-1.5.1-final-20020615.jar com.saternos.database.utilities.ExternalTableGenerator new_department_data.xls

2.再利用oracle的sqlldr命令导入数据效率高。

test.ctl
load data
infile 'TEST.csv'
into table TEST
REPLACE 
fields terminated by ','  OPTIONALLY ENCLOSED BY '"'   
trailing nullcols
(
   TEST_ID   "SE_AIRCRAFT.nextval" ,                
TEST      "upper(:TEST)",
TEST_USER  "to_number(:TEST_user)",
TEST_DATE  DATE "yyyy-mm-dd hh24:mi:ss",
TEST_NOTE

)

sqlldr admin/password@DATABASE control=ctl/TEST.ctl log=out/TEST.log data=data/TEST.csv  bad=out/TEST.bad skip=1 
分享到:
评论

相关推荐

    将excel数据导入到oracle数据库

    总结,将Excel数据导入Oracle数据库涉及到数据预处理、数据库操作和数据迁移工具的使用。理解这个过程有助于提升数据管理效率,确保数据的一致性和准确性。虽然可能需要一些技术背景,但通过实践和学习,任何人都...

    命令实现excel导入到oracle

    本篇文章将详细讲解如何通过命令行方式将Excel数据导入到Oracle数据库。 首先,我们需要了解基本的工具和概念。Oracle提供了一个名为SQL*Loader的实用程序,它允许用户通过控制文件从外部数据源(如CSV或Excel)...

    excel导入数据到Oracle数据库

    ### Excel导入数据到Oracle数据库详解 #### 一、前言 在日常工作中,我们经常会遇到需要将Excel中的数据批量导入到Oracle数据库的情况。...希望本文能帮助大家更好地理解和掌握Excel导入Oracle数据库的操作流程。

    JAVA实现Excel表数据导入ORACLE数据库

    ### JAVA实现Excel表数据导入ORACLE数据库 #### 知识点概述 本文将详细介绍如何使用Java编程语言将Excel表格中的数据导入到Oracle数据库中。这一过程涉及到的关键技术包括:使用JDBC连接Oracle数据库、利用ODBC...

    excel 导入到oracle工具

    这种工具简化了从Excel的工作表批量导入数据到Oracle数据库的过程,特别适合处理大量数据更新或迁移任务。在IT行业中,这种功能对于数据分析师、数据库管理员以及需要频繁进行数据交换的用户来说,是非常实用的。 ...

    Excel文件导入到Oracle数据库

    3. **利用工具或编程**:有多种方式可将Excel数据导入Oracle,包括使用Oracle SQL Developer、PL/SQL Developer等图形界面工具,或者通过编写SQL*Loader、外部表等脚本进行批量导入。这些工具通常允许设置列映射,...

    将EXCEL表导入到ORACLE中

    在IT行业中,将Excel数据导入Oracle数据库是一项常见的任务,尤其在数据分析、报表生成或系统迁移等场景下。这里,我们主要关注如何通过Java编程来实现这个功能,利用JXL库来处理Excel文件,并通过Java JDBC连接...

    excel 导入oracle

    "Excel导入Oracle"是一种常见的需求,特别是在系统初始化、数据迁移或数据分析时。"Xls2Ora"是一个专门为此目的设计的小工具,它简化了从Excel表格向Oracle数据库导入数据的过程。 首先,让我们详细了解Excel。...

    excel导入数据到oracle工具

    "Excel导入数据到Oracle工具"就是为了方便用户将Excel中的数据高效、准确地导入到Oracle数据库而设计的。这个小工具简化了手动操作的繁琐步骤,提高了工作效率。 首先,我们需要了解Excel和Oracle的基本概念。Excel...

    excel数据导入oracle完整代码(C#)

    本示例将详细介绍如何使用C#编程语言将Excel数据导入Oracle数据库。这里,我们假设你已经具备一定的C#编程基础,对Oracle数据库有基本了解,并且安装了Visual Studio 2008和Oracle 10g。 首先,我们需要在C#项目中...

    Excel数据导入Oracle.docx

    Excel数据导入Oracle是一种常见的数据迁移操作,通过将Excel表格中的数据导入到Oracle数据库中,可以实现数据的集成和共享。下面将详细介绍Excel数据导入Oracle的步骤和知识点。 1. 准备数据:在Excel中构造出需要...

    excel直接导入到oracle数据库工具

    excel直接导入到oracle数据库 简单易用,初始化数据时就直接导入。

    XlsToOra1.4(Excel导入到Oracle)破解版

    从Excel导入数据到Oracle库中的工具

    excel导入oracle数据库

    本文档将指导读者如何使用 PL/SQL 将 Excel 数据导入到 Oracle 数据库中。该过程中,我们将使用 ODBC Importer 导入 Excel 数据,然后将其转换为 Oracle 数据库中的数据表。 描述详解 在本文档中,我们将使用 PL/...

    excel批量导入oracle数据库

    本文将详细讲解如何使用Excel批量导入Oracle数据库,这是一个常见的需求,特别是在数据分析和报表生成等领域。 首先,我们需要了解Excel和Oracle数据库的基本概念。Excel是一款由Microsoft开发的电子表格应用程序,...

    Excel文件数据导入Oracle

    ### Excel文件数据导入Oracle:详尽指南与实践 在企业数据管理中,Excel因其灵活性和易用性,常被用于数据收集与初步整理。然而,当数据需要在更复杂、功能更全面的数据库系统中进行高级分析或长期存储时,Oracle...

    Excel数据导入到Oracle数据库工具 XLSToOracle

    XLSToOracle是一款设计精巧的实用工具,它的主要功能就是帮助用户高效地将Excel工作表中的数据转换并导入到Oracle数据库。这个过程无需复杂的SQL语句或编程知识,只需几步简单的操作,即可完成数据迁移,极大地提升...

    excel数据导入oracle

    ### Excel数据导入Oracle数据库知识点详解 #### 一、概述 在日常工作中,经常需要将Excel中的数据批量导入到Oracle数据库中。本文档将详细介绍如何使用Java语言实现这一过程,并通过具体的示例步骤来帮助理解整个...

    一个excel导入到oracle数据库的实例,进入宏可见

    打开excel,alt+F11进入宏后可以看到VBA代码,通过与oracle数据库的链接,实现数据导出查询到excel。

Global site tag (gtag.js) - Google Analytics