使用sqlldr将文件中的数据导入到数据库
1.创建数据文件:
?如,在D:\创建 zhaozhenlong.txt 文件,文件内容为:
11,12,13
21,22,23
31,32,33
2、创建控制文件:
如,在D:\创建 zhaozhenlong.ctl 文件,文件内容为:
load da ta
infile 'd:\zhaozhenlong.txt'
append into table zhaozhenlong
fields terminated by ','
(c1,c2,c3)
3、在数据库中创建表:
create table zhaozhenlong(c1 varchar(20),c2 varchar(20),c3 varchar2(20));
4、在‘开始’/‘运行’中,执行:
sqlldruserid=cs/cs@orademo control=d:\zhaozhenlong.ctl
5、查询数据库:
select * from zhaozhenlong
结果为:
?C1 C2 C3
1 11 12 13
2 21 22 23
3 31 32 33
?
例2:
?
?关于 oracle 中 sqlldr 的用法
2005-12-30 21:13:49
大 中 小
这几天研究了一下 sqlldr 的用法,今天在这里写出来供有需要的同行享用.
现在有一个文件 Output.txt 内容如下:
?
Ivy,Lam,PR02004,2005,09,21,17,32,00,I,D,Main Door,PR,
Carmen,Siu,AC04023,2005,09,21,17,32,01,I,D,Main Door,Account,
Xing,Lee,CM06021,2005,09,21,17,32,02,I,D,Main Door,Communications,
Barry,Yu,MK05006,2005,09,21,17,32,02,I,D,Main Door,Marketing,
Overtime,nil,OV0001,2005,09,21,17,32,07,I,D,Main Door,Product,
Sammy,Mow,SA02322,2005,09,21,17,32,09,I,D,Main Door,Sales,
Emily,Fu,CM06024,2005,09,21,17,32,10,I,D,Main Door,Communications,
Stella,Chow,PT02145,2005,09,21,17,32,11,I,D,Main Door,Product,
?
是有规律的数据,中间都是用","分开的,现在我要将此文件导入到 oracle 中:
?
第一步,当然是建表,上面有一行中有几个数据就建几个字段.
?
二,写一个 *.ctl 的文件,内容如下
?
load da ta
infile 'D:\owen\work\CardAttendence\Completed\windows\Output.txt'
badfile 'D:\owen\work\CardAttendence\Completed\windows\Output.bad'
append
into table system.card_time_original
fields terminated by ","
(lName,fName,emp_id,year,month,day,hour,minute,second,inOut,status,doorName,dept)
三,在 doc 窗口下输入如下命令
?
sqlldruserid=system/111111@XE control=D:\owen\work\CardAttendence\Completed\windows\imp ortOne.ctl log=D:\owen\work\CardAttendence\Completed\windows\imp ort.log
?
注意:这里一定要是当前用户对此表有所有权限, 还有一定不能用 sys 用户,要不然会出错
?
如果要将此数据导入到两个表中(结构相同),那么可以把控制文件改为如下所示:
?
load da ta
infile 'D:\owen\work\CardAttendence\Completed\windows\Output.txt'
badfile 'D:\owen\work\CardAttendence\Completed\windows\Output.bad'
append
into table system.card_time_original
WHEN lName != ' '
fields terminated by ","
(lName POSITION(1),fName,emp_id,year,month,day,hour,minute,second,inOut,status,doorName,dept)
into table system.card_time_original_bak
WHEN lName != ' '
fields terminated by ","
(lName POSITION(1),fName,emp_id,year,month,day,hour,minute,second,inOut,status,doorName,dept)
?
FAQ_SQLLDR用法总结
在数据仓库项目实施过程中,ETL是重要的一环,实施的好与坏,关系到项目的成功与否。
在数据抽取领域,相应的工具有IBM DataStage,Informatica PowerCenter,这里介绍Oracle自带的SQLLODER,
这是在Oracle数据仓库实施过程中最容易掌握的工具。在介绍之前,先考虑下面问题:
?一、注意SQLLDR要解决的问题,即实现ETL过程的问题
1、导入表的数据类型为日期类型
2、导入数据过程中的转换问题
3、导入数据过程中的过滤问题
4、导入数据过程中的截取问题
5、导入空列在转换时可能会遇到的问题
6、导入数据的分割符问题,如逗号,制表符,空白符都是常见的
用法:
二、控制文件:一个控制命令的脚本文件,通常以ctl结尾,Test.ctl内容如下:
?
LOAD DA TA
INFILE 'F:\SQLLDR\da ta.txt'
INFILE 'F:\SQLLDR\da ta2.txt' //可以从多个文件导入数据
// INFILE * //导入的内容在本文件最后的BEGINDATA后面就是导入的内容
INTO TABLE sdata.T_TEST
?
//四种装载方式,四选一
APPEND // 原先的表有数据 就加在后面
// INSERT //装载空表 如果原先的表有数据 sqlloader会停止 默认值
// REPLACE // 原先的表有数据 原先的数据会全部删除
// TRUNCATE // 指定的内容和replace的相同 会用truncate语句删除现存数据
?
//过滤装载的数据
WHEN T_DATE = '2007-07-02' //大于和小于等其它比较还没解决
?
//指定分割符
FIELDS TERMINATED BY ',' // x'09' (制表符)
-- FIELDS TERMINATED BY WHITESPACE //以空白分割,实际这样分割危险
OPTIONALLY ENCLOSED BY '"'
TRAILING NULLCOLS // 表的字段没有对应的值时允许为空 ,这句很有用,默认加的好
?
//表的字段,可以在里面大做文章
(
T_ID FILLER, // FILLER 关键字 此列的数值不会被装载
T_DATE "CASE WHEN :T_DATE is null THEN TO_DATE('2999-12-31','yyyy-mm-dd') ELSE TO_DATE(:T_DATE,'yyyy-mm-dd') END",
?//日期类型特别说明,并且要指定其格式
//更一般的格式是T_DATE date ‘yyyy-mm-dd’
T_NAME POSITION(3:6) "UPPER(:T_NAME)", //用位置POSITION来告诉装载的数据
//"UPPER(:T_NAME)" 转换为大写,注意冒号
T_SEX position(*:8) , // 这个字段的开始位置在前一字段的结束位置
ENTIRE_LINE "UPPER(:T_NAME||:T_SEX)" //连接并转换为大写
)
?
/****可继续 插入数据到其他表
INTO TABLE sdata.T_TEST
INSERT
WHEN T_DATE = '2007-07-02' ? //大于和小于等其它比较还没解决
.//BEGINDATA // 与前面的INFILE?*对应,一般不会这样用吧?
//1,ajsdlkfjsdkl,0?
?
三、运行方法
命令窗口执行:
sqlldruserid=sdata/sdata@rasdevdb control=F:\SQLLDR\Test.ctl?
为了方便,一般写个bat 文件,在bat文件中输入上述的内容即可,最后在命令窗口中运行这个bat文件,原理是一样的。
总之,这其实是Oracle中的一个用法而已。
三、
对不规则数据源的处理
?
--TRAILING NULLCOLS // 表的字段没有对应的值时允许为空,这句很有用
例如:
对于由EXCEL文件导出成CSV文件时,有的行末没有数据会缺少分割符,这在DS中会报错的,在SQLLD
使用sqlldr将文件中的数据导入到数据库的更多相关文章
- [Python]将Excel文件中的数据导入MySQL
Github Link 需求 现有2000+文件夹,每个文件夹下有若干excel文件,现在要将这些excel文件中的数据导入mysql. 每个excel文件的第一行是无效数据. 除了excel文件中已 ...
- 小技巧之“将Text文件中的数据导入到Excel中,这里空格为分割符为例”
1.使用场景 将数据以文本导出后,想录入到Excel中,的简便方案, 起因:对于Excel的导出,Text导出明显会更方便些 2.将Text文件中的数据导入到Excel中,这里空格为分割符为例的步骤 ...
- 将CSV文件中的数据导入到SQL Server 数据库中
导入数据时,需要注意 CSV 文件中的数据是否包含逗号以及双引号,存在时,导入会失败 选择数据库 -> 右键 -> 任务 -> 导入数据 ,然后根据弹出的导入导出向导(如下图)中的提 ...
- 【SQL Server数据迁移】把csv文件中的数据导入SQL Server的方法
[sql] view plaincopy --1.修改系统参数 --修改高级参数 sp_configure 'show advanced options',1 go --允许即席分布式查询 sp_co ...
- 将Excel表中的数据导入MySQL数据库
原文地址: http://fanjiajia.cn/2018/09/26/%E5%B0%86Excel%E8%A1%A8%E4%B8%AD%E7%9A%84%E6%95%B0%E6%8D%AE%E5% ...
- 将Excel表中的数据导入到数据库
网上查到的有参考价值的就一家,自己调试发现可行.感谢原创文章:将Excel中数据导入数据库(一) using System; using System.Collections.Generic; usi ...
- 解析excel文件并将数据导入到数据库中
今天领导给安排了一个临时工作,让我将一个excel里面的数据解析后放入数据库中,经过一个下午的努力成功完成,现在将代码献上,希望对大家有所帮助 一.需要导入的jar 1.commons-collect ...
- 将excel文件中的数据导入到mysql
·在你的表格中增加一列,利用excel的公式自动生成sql语句,具体方法如下: 1)增加一列(假设是D列) 2)在第一行的D列,就是D1中输入公式:=CONCATE ...
- 把excel中的数据导入到数据库
import.php <?php header("Content-Type:text/html;charset=utf-8"); echo '<html> < ...
随机推荐
- Python 融于ASP框架
一.ASP的平反 想到ASP 很多人会说 “asp语言很蛋疼,不能面向对象,功能单一,很多东西实现不了” 等等诸如此类. 以上说法都是错误的,其一ASp不是一种语言是 微软用来代替CGI的一种web框 ...
- JAVA类型信息——反射机制
JAVA类型信息——反射机制 一.反射机制概述 1.反射机制:就是java语言在运行时拥有的一项自我观察的能力,java通过这种能力彻底了解程序自身的情况,并为下一步的动作做准备. 2.反射机制的功能 ...
- 浅说Java中的反射机制(二)
写过一篇Java中的反射机制,不算是写,应该是抄了,因为那是别人写的,这一篇也是别人写的,摘抄如下: 引自于Java基础--反射机制的知识点梳理,作者醉眼识朦胧.(()为我手记) 什么是反射? 正常编 ...
- 世界上还有一个东西叫Virtual Pascal
官网是:http://web.archive.org/web/20060312064321/http://www.vpascal.com/news.php?item.16 不过2005年就不再维护了. ...
- CSS3:empty
:empty ---空的元素样式 <!DOCTYPE html> <html> <head lang="en"> <meta charse ...
- wordpress学习一: 环境搭建
原来想单独找个linux的机器搞套完整的环境,机器都找好了,环境搞了半天.搞完后,感觉环境什么的不重要,核心是学好php和wordpress,单独的环境维护还开发成本都不小,所以 还是采用 xampp ...
- Card Game Cheater---hdu1528(扑克建图求二分匹配)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1528 题意就是给有两个人有n张牌第二个人知道第一个人的牌的序列: 然后第二个人尽可能的让自己得更高的分 ...
- 【原创】【ViewFlow+GridView】Parameter must be a descendant of this view问题分析
关于ViewFlow和GridView嵌套导致Parameter must be a descendant of this view问题的解决方案 [关于ViewFlow] ViewFlow是一款 ...
- Eclipse配置Flex开发环境(转)
Eclipse配置Flex开发环境 开发环境:Eclipse3.2.Flex Builder31.下载安装Flex Builder3,下载地址:http://subject.csdn.net/adob ...
- O(1)时间内删除指定链表结点
题目 给定单链表头指针和一个结点指针,定义一个函数在O(1)时间内删除该结点. 分析 对于上图实例链表(a)删除指针p有两种方式 思路1:(b)找到前一个指针pre,赋值pre->next = ...