今天公司需要把外部文本的一些数据导入到数据库。这里把相关步骤和注意的地方记录,供需要的人参考学习!这里的环境是在windows下的数据库,linux或者其他数据库同理!

1、准备工作:创建需要导入数据的表结构,如果已有相关的表,此步省略!

SQL> create table test
  2  (
  3    host          VARCHAR2(30),
  4    user_name VARCHAR2(30),
  5    ip_address      VARCHAR2(15),
  6    pass            VARCHAR2(4) default 'no' not null,
  7    judge           NUMBER default 0 not null,
  8    endtime         DATE
  9  );

表已创建。

2、编写sqlload导入数据的控制文件,这里测试的控制文件如下,可以根据自己需要添加相关的控制参数,测试的话复制保存为txt文件即可!

LOAD DATA
INFILE 'd:\data.txt'
INTO TABLE test
TRUNCATE
fields terminated by ','

trailing nullcols
(HOST,USER_NAME,IP_AddrESS,PASS,JUDge,endTIME)

控制文件还有其他参数,根据自己需求调整和测试:

附部分控制参数:具体用法以官方文档为准

OPTIONS (skip=,rows=)    -- sqlldr 命令显示的选项可以写到这里边来,skip= 用来跳过数据中的第一行
LOAD DATA
INFILE "users_data.csv"   --指定外部数据文件,可以是不同格式的数据文件,如csv、txt都支持可以写
                   多个 INFILE "another_data_file.csv" 指定多个数据文件
truncate    --操作类型,用 truncate table 来清除表中原有记录,根据情况而定是否需要清楚原有表中数据
INTO TABLE users   --要插入记录的表
Fields terminated by ","   --数据中每行记录用 "," 分隔
Optionally enclosed by '"' --数据中每个字段用 '"' 双引号框起,比如字段中有 "," 分隔符时
trailing nullcols --表的字段没有对应的值时允许为空
(
virtual_column FILLER, --这是一个虚拟字段,用来跳过由 PL/SQL Developer 生成的第一列序号
user_id number, --字段可以指定类型,否则认为是 CHARACTER 类型, log 文件中有显示
user_name,
login_times,

last_login DATE "YYYY-MM-DD HH24:MI:SS" -- 指定接受日期的格式,相当用 to_date() 函数转换
)
---------------------------------------------------------------------------------------------
insert --为缺省方式,在数据装载开始时要求表为空
append --在表中追加新记录
replace --删除旧记录(用 delete from table 语句),替换成新装载的记录
truncate --删除旧记录(用 truncate table 语句),替换成新装载的记录

3、创建需要导入的数据,注意数据格式必须和表结构严格对应,否则导入失败!测试数据如下:有部分数据最后字段为空,所以控制文件中需要加trailing nullcols 参数!

ttt,SCOTT,192.168.1.111,yes,,
qq,JACK,192.168.1.20,no,,
YY,TOM,192.168.1.20,no,,
WEB1,HAHA,192.168.1.1,no,,
XXX,ROBIN,111.111.111.111,no,,-AUG-
DB2,LUCY,192.168.10.10,no,,
ORACLE,LILY,222.222.222.222,no,,
WORKGROUP,DENNIS,133.133.133.133,no,,-AUG-
DCR,CANDY,192.168.100.10,no,,
T3,FLY,192.168.10.33,no,,
T1,LINDA,192.168.10.200,no,,-AUG-
T2,LILEI,192.168.100.31,no,,-AUG-

需要加装的文件

4、导入数据-导入时也有相关的参数进行控制

附部分导入参数:各参数可以再命令行下输入sqlldr查看

C:\Documents and Settings\Administrator>sqlldr

SQL*Loader: Release 11.2.0.1.0 - Production on 星期三 2月 27 17:13:24 2013

Copyright (c) 1982, 2009, Oracle and/or its affiliates.  All rights reserved.

用法: SQLLDR keyword=value [,keyword=value,...]

有效的关键字:

userid -- ORACLE 用户名/口令
   control -- 控制文件名
       log -- 日志文件名
       bad -- 错误文件名
      data -- 数据文件名
   discard -- 废弃文件名
discardmax -- 允许废弃的文件的数目         (全部默认)
      skip -- 要跳过的逻辑记录的数目  (默认 0)
      load -- 要加载的逻辑记录的数目  (全部默认)
    errors -- 允许的错误的数目         (默认 50)
      rows -- 常规路径绑定数组中或直接路径保存数据间的行数
               (默认: 常规路径 64, 所有直接路径)
  bindsize -- 常规路径绑定数组的大小 (以字节计)  (默认 256000)
    silent -- 运行过程中隐藏消息 (标题,反馈,错误,废弃,分区)
    direct -- 使用直接路径                     (默认 FALSE)
   parfile -- 参数文件: 包含参数说明的文件的名称
  parallel -- 执行并行加载                    (默认 FALSE)
      file -- 要从以下对象中分配区的文件
skip_unusable_indexes -- 不允许/允许使用无用的索引或索引分区  (默认 FALSE)
skip_index_maintenance -- 没有维护索引, 将受到影响的索引标记为无用  (默认 FALSE)

commit_discontinued -- 提交加载中断时已加载的行  (默认 FALSE)
  readsize -- 读取缓冲区的大小               (默认 1048576)
external_table -- 使用外部表进行加载; NOT_USED, GENERATE_ONLY, EXECUTE  (默认 NO
T_USED)
columnarrayrows -- 直接路径列数组的行数  (默认 5000)
streamsize -- 直接路径流缓冲区的大小 (以字节计)  (默认 256000)
multithreading -- 在直接路径中使用多线程
 resumable -- 启用或禁用当前的可恢复会话  (默认 FALSE)
resumable_name -- 有助于标识可恢复语句的文本字符串
resumable_timeout -- RESUMABLE 的等待时间 (以秒计)  (默认 7200)
date_cache -- 日期转换高速缓存的大小 (以条目计)  (默认 1000)
no_index_errors -- 出现任何索引错误时中止加载  (默认 FALSE)

如下命令:control=指定控制文件和路径  log=导入日志文件保存  bad=错误信息  data=数据文件

开始导入:

C:\Documents and Settings\Administrator>sqlldr scott/tiger control=d:\sqlload.txt log=d:\loadlog.txt bad=d:\bad.txt data=d:\data.txt
SQL*Loader: Release 11.2.0.1.0 - Production on 星期三 2月 27 17:06:52 2013

Copyright (c) 1982, 2009, Oracle and/or its affiliates.  All rights reserved.

达到提交点 - 逻辑记录计数 12

导入成功后查看结果:

C:\Documents and Settings\Administrator>sqlplus scott/tiger

SQL*Plus: Release 11.2.0.1.0 Production on 星期三 2月 27 17:07:05 2013

Copyright (c) 1982, 2010, Oracle.  All rights reserved.

连接到:
Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options

SQL> select * from test;

HOST       USER_NAME  IP_ADDRESS                     PASS          JUDGE ENDTIME
----------      ----------      ------------------------------         --------           ---------- --------------
ttt             SCOTT      192.168.1.111                  yes               1
qq             JACK         192.168.1.20                    no                1
YY            TOM          192.168.1.20                    no                1
WEB1        HAHA        192.168.1.1                     no                1
DB2           LUCY         192.168.10.10                 no                1
ORACLE     LILY           222.222.222.222             no                1
DCR          CANDY       192.168.100.10                no                1
T3            FLY           192.168.10.33                  no                1

已选择8行。

结果显然与数据文件不一致,最后一个字段有值的数据没有导入!这不是最后想要的结果!但可以确定已经有数据导入,表示表对象和控制文件没问题!

应该是数据文件的格式问题!注意数据文件最后一个字段是日期型数据。查看是不是数据库现有日期类型不支持数据文件的表示格式

SQL> select sysdate from dual;

SYSDATE
--------------
-2月 -

显然和我们数据文件的日期显示不一致,且是中文,这里可以把数据文件的最后字段的数据改成和数据库一样的格式,也可以对数据库的格式和语言进行更改,

因为测试系统是windows才会出现这个错误,在linux可以避免!

如果是linux  可以尝试以下步骤解决:

alter system set nls_date_format='DD-MON-RR';

alter system set nls_language= american scope = spfile;------------得重启数据库

这里由于是windows,这里就不更改语言和重启数据库,直接对数据文件进行更改,修改后的数据文件如下

ttt,SCOTT,192.168.1.111,yes,,
qq,JACK,192.168.1.20,no,,
YY,TOM,192.168.1.20,no,,
WEB1,HAHA,192.168.1.1,no,,
XXX,ROBIN,111.111.111.111,no,,-5月 -
DB2,LUCY,192.168.10.10,no,,
ORACLE,LILY,222.222.222.222,no,,
WORKGROUP,DENNIS,133.133.133.133,no,,-5月 -
DCR,CANDY,192.168.100.10,no,,
T3,FLY,192.168.10.33,no,,
T1,LINDA,192.168.10.200,no,,-5月 -
T2,LILEI,192.168.100.31,no,,-5月 -

再导入一次,导入后进行查看结果

C:\Documents and Settings\Administrator>sqlldr scott/tiger control=d:\sqlload.txt log=d:\loadlog.txt bad=d:\bad.txt data=d:\data.txt

SQL*Loader: Release 11.2.0.1.0 - Production on 星期三 2月 27 17:48:44 2013

Copyright (c) 1982, 2009, Oracle and/or its affiliates.  All rights reserved.

达到提交点 - 逻辑记录计数 12

C:\Documents and Settings\Administrator>sqlplus scott/tiger

SQL*Plus: Release 11.2.0.1.0 Production on 星期三 2月 27 17:49:21 2013

Copyright (c) 1982, 2010, Oracle.  All rights reserved.

连接到:
Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options

SQL> col host for a10
SQL> col user_name for a15
SQL> select * from test;

HOST           USER_NAME       IP_ADDRESS                     PASS          JUDGE ENDTIME
----------        --------------- ------------------------------                --------         ---------- --------------
ttt               SCOTT           192.168.1.111                      yes               1
qq               JACK            192.168.1.20                          no                1
YY              TOM             192.168.1.20                          no                1
WEB1          HAHA            192.168.1.1                           no                1
XXX             ROBIN           111.111.111.111                    no                1 08-5月 -08
DB2             LUCY            192.168.10.10                        no                1
ORACLE       LILY            222.222.222.222                      no                1
WORKGROUP  DENNIS          133.133.133.133                 no                0 08-5月 -08
DCR            CANDY           192.168.100.10                     no                1
T3              FLY             192.168.10.33                         no                1
T1             LINDA           192.168.10.200                       no                1 08-5月 -08
T2             LILEI           192.168.100.31                         no                1 08-5月 -08

已选择12行。

恢复正常:数据和数据文件完全一样!到此整个数据导入完成!主要注意的地方还是数据文件的建立,确认分隔以及和表的结构对应!

ORACLE-SQLLOAD导入外部数据详解的更多相关文章

  1. oracle数据库exp/imp命令详解

    转自http://wenku.baidu.com/link?url=uD_egkkh7JtUYJaRV8YM6K8CLBT6gPJS4UlSy5WKhz46D9bnychTPdgJGd7y6UxYtB ...

  2. MySQL数据库使用mysqldump导出数据详解

    mysqldump是mysql用于转存储数据库的实用程序.它主要产生一个SQL脚本,其中包含从头重新创建数据库所必需的命令CREATE TABLE INSERT等.接下来通过本文给大家介绍MySQL数 ...

  3. oracle中的dual表详解

    oracle中的dual表详解 1.DUAL表的用途 Dual 是 Oracle中的一个实际存在的表,任何用户均可读取,常用在没有目标表的Select语句块中 --查看当前连接用户 SQL> s ...

  4. Mysql数据库导入命令Source详解

    Mysql数据库导入命令Source详解 几个常用用例: 1.导出整个数据库 mysqldump -u 用户名 -p 数据库名 > 导出的文件名 mysqldump -u root -p dat ...

  5. oracle正则表达式regexp_like的用法详解

    oracle正则表达式regexp_like的用法详解 /*ORACLE中的支持正则表达式的函数主要有下面四个:1,REGEXP_LIKE :与LIKE的功能相似2,REGEXP_INSTR :与IN ...

  6. Oracle 查询优化的基本准则详解

      注:报文来源:想跌破记忆寻找你 < Oracle 查询优化的基本准则详解 > Oracle 查询优化的基本准则详解 1:在进行多表关联时,多用 Where 语句把单个表的结果集最小化, ...

  7. mysql导入导出命令详解

    mysql导入导出命令详解 该命令适用于临时备份操作. 一.导出数据库用mysqldump命令(注意mysql的安装路径,即此命令的路径): /usr/local/mysql/bin/  ---> ...

  8. linux驱动由浅入深系列:高通sensor架构实例分析之三(adsp上报数据详解、校准流程详解)【转】

    本文转载自:https://blog.csdn.net/radianceblau/article/details/76180915 本系列导航: linux驱动由浅入深系列:高通sensor架构实例分 ...

  9. oracle数据库的完整性约束规则详解

    CSDN日报20170303--<百亿互金平台救火故事> 程序员2月书讯 社区有奖问答--一起舞动酷炫的iOS动画 基于Spark的分布式深度学习和认知计算 oracle数据库的完 ...

随机推荐

  1. JUC 中的 Atomic 原子类总结

    1 Atomic 原子类介绍 Atomic 翻译成中文是原子的意思.在化学上,我们知道原子是构成一般物质的最小单位,在化学反应中是不可分割的.在我们这里 Atomic 是指一个操作是不可中断的.即使是 ...

  2. iOS滤镜系列-滤镜开发概览

    概述 滤镜最早的出现应该是应用在相机镜头前实现自然光过滤和调色的镜片,然而在软件开发中更多的指的是软件滤镜,是对镜头滤镜的模拟实现.当然这种方式更加方便快捷,缺点自然就是无法还原拍摄时的真实场景,例如 ...

  3. 【转】面向GC的Java编程

    Java程序员在编码过程中通常不需要考虑内存问题,JVM经过高度优化的GC机制大部分情况下都能够很好地处理堆(Heap)的清理问题.以至于许多Java程序员认为,我只需要关心何时创建对象,而回收对象, ...

  4. Lua表(table)的个人总结

    1.表的简介和构造 table是个很强大且神奇的东西,又可以作为数组和字典,又可以当作对象,设置module.它是由数组和哈希表结合的实现的.他的key可以是除nil以外任意类型的值,key为整数时, ...

  5. SEATA 分布式事务入门DEMO

    Simple Extensible Autonomous Transacation Architecture,seata是简单的.可扩展.自主性高的分布式架构 SEATA Server Configu ...

  6. MySQL快速回顾:计算字段与函数

    9.1 计算字段 存储在数据库表中的数据一般不是应用程序所需要的格式.比如: 如果想要在一个字段中既显示公司名,又显示公式的地址,但这两个信息一般包含在不同的表列中. 城市.州和邮政编码存储在不同的列 ...

  7. Unity_Dungeonize 随机生成迷宫

    本文对随机生成迷宫的实现思路进行记录,其作用在于为游戏过程提供随机性以及节省开发周期,下面是Dungeonize的结构 随机迷宫的生成主要包括几个阶段 1.生成房间体结构,为墙体,自定义房间,自定义物 ...

  8. CentOS6.8 LAMP

    第一次配置LAMP运行环境,上网查询了很多资料,一边试命令一边学习.服务器重置了很多次. 虽然有OneinStack这个方便的网站一键命令部署,但知道这个网站却是我自己踩坑之后的事情了,故此记录. 1 ...

  9. React躬行记(16)——React源码分析

    React可大致分为三部分:Core.Reconciler和Renderer,在阅读源码之前,首先需要搭建测试环境,为了方便起见,本文直接采用了网友搭建好的环境,React版本是16.8.6,与最新版 ...

  10. AD19覆铜与边框间距设置方法

    转载请注明出处,并附带本文网址https://www.cnblogs.com/brianblog/p/9894867.html, 由于高版本AD不能将机械层直接转变为KEPP OUT LAYER层,所 ...