位置: 编程技术 - 正文

sqlldr装载数据实现代码(sql*loader-309)

编辑:rootadmin
这里用 excel 数据做个最简单的测试。 1)把 excel 数据存为 t.txt 文件,注意文件后缀名为 .txt 1 jhchen // :: --7 : 2 jhchen // :: --7 : 3 jhchen // :: --7 : 2)SQL> create table t_load( id number, name varchar2(), dat1 date, dat2 date, dat3 date ); Table created. 3)控制文件 t.ctl 如下 load data infile 't.txt' badfile 't.bad' append into table t_load fields terminated by X''   trailing nullcols ( id , name , dat1 date "mm/dd/yyyy hh:mi:ss", dat2 date "yyyy-mm-dd hh:mi:ss" ) 其中,X'' 是制表符,TAB键,trailing nullcols 表示如表的字段没有对应的值时允许为空。 4)C:Documents and Settingscjh>sqlldr userid=jhchen/oracle control=t.ctl SQL*Loader: Release 9.2.0.6.0 - Production on 星期一 月 7 :: Copyright (c) , , Oracle Corporation. All rights reserved. 达到提交点,逻辑记录计数3 5)SQL> select * from t_load; ID NAME DAT1 DAT2 DAT3 ---------- ---------- --------- --------- --------- 1 jhchen -NOV- -NOV- 2 jhchen -NOV- -NOV- 3 jhchen -NOV- -NOV- sqlldr userid=lgone/tiger control=a.ctl LOAD DATA INFILE 't.dat' // 要导入的文件 // INFILE 'tt.date' // 导入多个文件 // INFILE * // 要导入的内容就在control文件里 下面的BEGINDATA后面就是导入的内容 INTO TABLE table_name // 指定装入的表 BADFILE 'c:bad.txt' // 指定坏文件地址 ************* 以下是4种装入表的方式 APPEND // 原先的表有数据 就加在后面 // INSERT // 装载空表 如果原先的表有数据 sqlloader会停止 默认值 // REPLACE // 原先的表有数据 原先的数据会全部删除 // TRUNCATE // 指定的内容和replace的相同 会用truncate语句删除现存数据 ************* 指定的TERMINATED可以在表的开头 也可在表的内部字段部分 FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"' // 装载这种数据: ,lg,"""lg""","lg,lg" // 在表中结果: lg "lg" lg,lg // TERMINATED BY X '' // 以十六进制格式 '' 表示的 // TERMINATED BY WRITESPACE // 装载这种数据: lg lg TRAILING NULLCOLS ************* 表的字段没有对应的值时允许为空 ************* 下面是表的字段 ( col_1 , col_2 ,col_filler FILLER // FILLER 关键字 此列的数值不会被装载 // 如: lg,lg,not 结果 lg lg ) // 当没声明FIELDS TERMINATED BY ',' 时 // ( // col_1 [interger external] TERMINATED BY ',' , // col_2 [date "dd-mon-yyy"] TERMINATED BY ',' , // col_3 [char] TERMINATED BY ',' OPTIONALLY ENCLOSED BY 'lg' // ) // 当没声明FIELDS TERMINATED BY ','用位置告诉字段装载数据 // ( // col_1 position(1:2), // col_2 position(3:), // col_3 position(*:), // 这个字段的开始位置在前一字段的结束位置 // col_4 position(1:), // col_5 position(3:) char(8) // 指定字段的类型 // ) BEGINDATA // 对应开始的 INFILE * 要导入的内容就在control文件里 ,Sql,what ,lg,show ===================================================================================== //////////// 注意begindata后的数值前面不能有空格 1 ***** 普通装载 LOAD DATA INFILE * INTO TABLE DEPT REPLACE FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"' (DEPTNO, DNAME, LOC ) BEGINDATA ,Sales,"""USA""" ,Accounting,"Virginia,USA" ,Consulting,Virginia ,Finance,Virginia ,"Finance","",Virginia // loc 列将为空 ,"Finance",,Virginia // loc 列将为空 2 ***** FIELDS TERMINATED BY WHITESPACE 和 FIELDS TERMINATED BY x'' 的情况 LOAD DATA INFILE * INTO TABLE DEPT REPLACE FIELDS TERMINATED BY WHITESPACE -- FIELDS TERMINATED BY x'' (DEPTNO, DNAME, LOC ) BEGINDATA Sales Virginia 3 ***** 指定不装载那一列 LOAD DATA INFILE * INTO TABLE DEPT REPLACE FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"' ( DEPTNO, FILLER_1 FILLER, // 下面的 "Something Not To Be Loaded" 将不会被装载 DNAME, LOC ) BEGINDATA ,Something Not To Be Loaded,Accounting,"Virginia,USA" 4 ***** position的列子 LOAD DATA INFILE * INTO TABLE DEPT REPLACE ( DEPTNO position(1:2), DNAME position(*:), // 这个字段的开始位置在前一字段的结束位置 LOC position(*:), ENTIRE_LINE position(1:) ) BEGINDATA Accounting Virginia,USA 5 ***** 使用函数 日期的一种表达 TRAILING NULLCOLS的使用 LOAD DATA INFILE * INTO TABLE DEPT REPLACE FIELDS TERMINATED BY ',' TRAILING NULLCOLS // 其实下面的ENTIRE_LINE在BEGINDATA后面的数据中是没有直接对应 // 的列的值的 如果第一行改为 ,Sales,Virginia,1/5/,, 就不用TRAILING NULLCOLS了 (DEPTNO, DNAME "upper(:dname)", // 使用函数 LOC "upper(:loc)", LAST_UPDATED date 'dd/mm/yyyy', // 日期的一种表达方式 还有'dd-mon-yyyy' 等 ENTIRE_LINE ":deptno||:dname||:loc||:last_updated" ) BEGINDATA ,Sales,Virginia,1/5/ ,Accounting,Virginia,/6/ ,Consulting,Virginia,5/1/ ,Finance,Virginia,/3/ 6 ***** 使用自定义的函数 // 解决的时间问题 create or replace function my_to_date( p_string in varchar2 ) return date as type fmtArray is table of varchar2(); l_fmts fmtArray := fmtArray( 'dd-mon-yyyy', 'dd-month-yyyy', 'dd/mm/yyyy', 'dd/mm/yyyy hh:mi:ss' ); l_return date; begin for i in 1 .. l_fmts.count loop begin l_return := to_date( p_string, l_fmts(i) ); exception when others then null; end; EXIT when l_return is not null; end loop; if ( l_return is null ) then l_return := new_time( to_date('','ddmmyyyy') + 1/// * p_string, 'GMT', 'EST' ); end if; return l_return; end; / LOAD DATA INFILE * INTO TABLE DEPT REPLACE FIELDS TERMINATED BY ',' TRAILING NULLCOLS (DEPTNO, DNAME "upper(:dname)", LOC "upper(:loc)", LAST_UPDATED "my_to_date( :last_updated )" // 使用自定义的函数 ) BEGINDATA ,Sales,Virginia,-april- ,Accounting,Virginia,// ,Consulting,Virginia,// :: ,Finance,Virginia, ,Finance,Virginia,-apr- ,Finance,Virginia,Not a date 7 ***** 合并多行记录为一行记录 LOAD DATA INFILE * concatenate 3 // 通过关键字concatenate 把几行的记录看成一行记录 INTO TABLE DEPT replace FIELDS TERMINATED BY ',' (DEPTNO, DNAME "upper(:dname)", LOC "upper(:loc)", LAST_UPDATED date 'dd/mm/yyyy' ) BEGINDATA ,Sales, // 其实这3行看成一行 ,Sales,Virginia,1/5/ Virginia, 1/5/ // 这列子用 continueif list="," 也可以 告诉sqlldr在每行的末尾找逗号 找到逗号就把下一行附加到上一行 LOAD DATA INFILE * continueif this(1:1) = '-' // 找每行的开始是否有连接字符 - 有就把下一行连接为一行 // 如 -,Sales,Virginia, // 1/5/ 就是一行 ,Sales,Virginia,1/5/ // 其中1:1 表示从第一行开始 并在第一行结束 还有continueif next 但continueif list最理想 INTO TABLE DEPT replace FIELDS TERMINATED BY ',' (DEPTNO, DNAME "upper(:dname)", LOC "upper(:loc)", LAST_UPDATED date 'dd/mm/yyyy' ) BEGINDATA // 但是好象不能象右面的那样使用 -,Sales,Virginia, -,Sales,Virginia, 1/5/ 1/5/ -, ,Finance,Virginia,// Finance,Virginia,// 8 ***** 载入每行的行号 load data infile * into table t replace ( seqno RECNUM //载入每行的行号 text Position(1:)) BEGINDATA fsdfasj //自动分配一行号给载入 表t 的seqno字段 此行为 1 fasdjfasdfl // 此行为 2 ... 9 ***** 载入有换行符的数据 注意: unix 和 windows 不同 \n & /n < 1 > 使用一个非换行符的字符 LOAD DATA INFILE * INTO TABLE DEPT REPLACE FIELDS TERMINATED BY ',' TRAILING NULLCOLS (DEPTNO, DNAME "upper(:dname)", LOC "upper(:loc)", LAST_UPDATED "my_to_date( :last_updated )", COMMENTS "replace(:comments,'n',chr())" // replace 的使用帮助转换换行符 ) BEGINDATA ,Sales,Virginia,-april-,This is the SalesnOffice in Virginia ,Accounting,Virginia,//,This is the AccountingnOffice in Virginia ,Consulting,Virginia,// ::,This is the ConsultingnOffice in Virginia ,Finance,Virginia,,This is the FinancenOffice in Virginia < 2 > 使用fix属性 LOAD DATA INFILE demo.dat "fix " INTO TABLE DEPT REPLACE FIELDS TERMINATED BY ',' TRAILING NULLCOLS (DEPTNO, DNAME "upper(:dname)", LOC "upper(:loc)", LAST_UPDATED "my_to_date( :last_updated )", COMMENTS ) demo.dat ,Sales,Virginia,-april-,This is the Sales Office in Virginia ,Accounting,Virginia,//,This is the Accounting Office in Virginia ,Consulting,Virginia,// ::,This is the Consulting Office in Virginia ,Finance,Virginia,,This is the Finance Office in Virginia // 这样装载会把换行符装入数据库 下面的方法就不会 但要求数据的格式不同 LOAD DATA INFILE demo.dat "fix " INTO TABLE DEPT REPLACE FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"' TRAILING NULLCOLS (DEPTNO, DNAME "upper(:dname)", LOC "upper(:loc)", LAST_UPDATED "my_to_date( :last_updated )", COMMENTS ) demo.dat ,Sales,Virginia,-april-,"This is the Sales Office in Virginia" ,Accounting,Virginia,//,"This is the Accounting Office in Virginia" ,Consulting,Virginia,// ::,"This is the Consulting Office in Virginia" ,Finance,Virginia,,"This is the Finance Office in Virginia" < 3 > 使用var属性 LOAD DATA INFILE demo.dat "var 3" // 3 告诉每个记录的前3个字节表示记录的长度 如第一个记录的 表示此记录有 个字节 INTO TABLE DEPT REPLACE FIELDS TERMINATED BY ',' TRAILING NULLCOLS (DEPTNO, DNAME "upper(:dname)", LOC "upper(:loc)", LAST_UPDATED "my_to_date( :last_updated )", COMMENTS ) demo.dat ,Sales,Virginia,-april-,This is the Sales Office in Virginia ,Accounting,Virginia,//,This is the Accounting Office in Virginia ,Consulting,Virginia,// ::,This is the Consulting Office in Virginia ,Finance,Virginia,,This is the Finance Office in Virginia < 4 > 使用str属性 // 最灵活的一中 可定义一个新的行结尾符 win 回车换行 : chr()||chr() 此列中记录是以 a|rn 结束的 select utl_raw.cast_to_raw('|'||chr()||chr()) from dual; 结果 7C0D0A LOAD DATA INFILE demo.dat "str X'7C0D0A'" INTO TABLE DEPT REPLACE FIELDS TERMINATED BY ',' TRAILING NULLCOLS (DEPTNO, DNAME "upper(:dname)", LOC "upper(:loc)", LAST_UPDATED "my_to_date( :last_updated )", COMMENTS ) demo.dat ,Sales,Virginia,-april-,This is the Sales Office in Virginia| ,Accounting,Virginia,//,This is the Accounting Office in Virginia| ,Consulting,Virginia,// ::,This is the Consulting Office in Virginia| ,Finance,Virginia,,This is the Finance Office in Virginia| ============================================================================== 象这样的数据 用 nullif 子句 -jan-Flipper seemed unusually hungry today. -jan-Spread over three meals. id position(1:3) nullif // 这里可以是blanks 或者别的表达式 // 下面是另一个列子 第一行的 1 在数据库中将成为 null LOAD DATA INFILE * INTO TABLE T REPLACE (n position(1:2) integer external nullif n='1', v position(3:8) ) BEGINDATA 1 lg

推荐整理分享sqlldr装载数据实现代码(sql*loader-309),希望有所帮助,仅作参考,欢迎阅读内容。

sqlldr装载数据实现代码(sql*loader-309)

文章相关热门搜索词:sqlloader941,sql loader-350,sql loader,安装sqlldr,sqlloader append,sql*loader-309,sql loader-350,sqlloader append,内容如对您有帮助,希望把文章链接给更多的朋友!

sql server字符串非空判断实现方法 CREATEfunctiongetcolor(@井号varchar(),@层位varchar())returnsvarchar()asbegindeclare@sqlvarchar();set@sql=''--distinctselect@sql=@sql+颜色+','from(selectdistinct颜色fromyourtablename

使用xp_cmdshell注销Windows登录用户(终端服务器超出最大连接数) 公司日常项目更新使用TFP,服务器一般维护用远程桌面管理,所以经常登录到服务器,但有时由于某种原因,登录到服务器后,帐号没有及时注销,致使后面无

SQL order by ID desc/asc加一个排序的字段解决查询慢问题 解决方法就是在orderbyIDdesc再加一个排序的字段,这样子可能会把速度提高很多。再加止排序的字段因查询而异了如表CREATETABLE[dbo].[CMPP_SendCentre]([id][int]ID

标签: sql*loader-309

本文链接地址:https://www.jiuchutong.com/biancheng/348137.html 转载请保留说明!

上一篇:Sql Server触发器的使用(sql server触发器实验)

下一篇:在SQL Server中使用SQL语句查询一个存储过程被其它所有的存储过程引用的存储过程名(在SQL Server中使用存储过程的优点包括)

  • 小规模纳税人每月不超过10万
  • 房产税如何申报流程
  • 出口退税转内销会计分录
  • 成立日期是注册日期吗
  • 企业内部控制调查问卷
  • 贴现利息支付方式
  • 融资租赁开具的发票是货物还是租金
  • 行政单位维修工程规定
  • 普通发票发票联丢了
  • 增值税的税负率就是用应缴纳的增值税总额
  • 增值税普通发票怎么开
  • 免税发票上税率是多少
  • 个体户怎么申请核定征收
  • 房屋抵债如何确定契税计税依据?
  • 所得税年报流程
  • 年报弥补以前年度亏损了还需要填107040表吗
  • 什么样的公司可以交五险一金
  • 业务招待费如何进行纳税调整
  • 社保打的生育保险怎么做账
  • 工程分配协议书范本
  • 服务业成本会计分析
  • 询证函有法律效力吗
  • 计提的跌价准备销售时怎么处理
  • 事业单位个人借款未还违反什么规定
  • 公司装修待摊费怎么算
  • linux不能联网怎么解决
  • js控件的监听事件怎么使用
  • sbdrvdet.exe - sbdrvdet是什么进程 有什么用
  • 会计如何建账做账
  • 哪些货物出口不需要运输条件
  • php preg_quote
  • php操作mysql数据库
  • 后续追加投资如何处理
  • 奥勒松又叫什么
  • pytorch如何学
  • php字符串在另一个字符串出现
  • php数组实现原理
  • 固定资产改造更新
  • 物流货运发票要交税吗
  • 所得税弥补亏损年限10
  • 物业管理公司的主管部门是哪个单位
  • 织梦如何开启会员功能
  • 累计折旧在资产负债表中填在哪里
  • 营业外收入汇算清缴时需要调增吗
  • 工资单应该盖什么章
  • mysql的long类型
  • 在业和存续的区别
  • 外购的商品用于生产经营
  • 小微企业所得税优惠政策最新2023
  • 工作失误扣工资的规定是什么
  • 公司委托银行付款的账务处理
  • 预收账款是否要交说
  • 其他债权投资有没有减值准备
  • 个税基数和社保有关系吗
  • 税局代开专用发票时交的钱如何记账?
  • 承租人和共同承租人
  • 发票税率如何填写
  • 差旅费借贷记账法的会计分录
  • 收到福利费的专用发票
  • sql server常规错误
  • windows如何安装安卓软件
  • xp怎么删除系统
  • win10系统任务栏卡顿
  • windows附件在哪里打开
  • u盘安装mac系统
  • 无线网络连接不上显示无ip分配
  • 如何调整windows桌面图标大小
  • linux page buffer cache深入理解
  • myminer.exe是什么
  • 如何调整输入法框的大小
  • python爬取教程
  • excite引擎
  • shell脚本自动化
  • ubuntu14重置密码
  • node chain
  • 各种手机ui大全
  • 三亚 税务
  • 以房产作价投资增值税怎么算
  • 实木地板什么
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设