位置: 编程技术 - 正文

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中使用存储过程的优点包括)

  • 办理出口退税时间要求
  • 出口退税率怎么算
  • 金蝶能够反年结账吗
  • 消费税为什么是减
  • 可转债中签后怎么操作卖出
  • 对方开具红字发票信息表后我们怎么开负数
  • 劳务公司临时工工资需要申报吗
  • 其他应付款为负数
  • 滴滴上开的发票是增值税发票还是普通发票
  • 自建厂房出售如何计算所得税
  • 收回多缴税金会计分录
  • 一般纳税人的含税收入怎么算
  • 新注册的公司什么时候可以开票纳税
  • 装卸搬运费是否含税
  • 法人股东获得分红的规定
  • 利润表净利润等于科目余额表
  • 升级设备属于什么科目
  • 存货变卖残值取得的收益计入哪个科目
  • 一般纳税人建筑服务税率是多少
  • mac双系统删除window后怎么重新恢复
  • mac怎么设置屏幕保护壁纸
  • linux deepin怎么样
  • php 数组
  • 公积金贷款所需手续
  • mds是什么进程
  • windows7如何制表
  • php可以和iis配合运行吗?
  • 研发费用加计扣除政策指引2.0
  • 跨行政区域是跨省吗
  • 任意公积金可以不提取吗
  • 生产企业免抵退税实例
  • 事业单位以固定薪资为准
  • 长期待摊费用如何处理
  • 退回发票金额是什么意思
  • 公司采购不含税产品合法吗
  • 交通运输企业会计科目
  • 无形资产出租如何入账
  • 如何利用sql进行数据传输
  • 删除一张表的某一条记录
  • 应付股利是否影响未分配利润
  • 开票内容不在经营范围内
  • 土地增值税中开发间接费用工资包括哪些人
  • 车辆购置税多少个点?
  • 所得税费用科目的期末余额应直接转入
  • 设备投入安装会计分录怎么写
  • 进项税转出怎样做账务处理
  • 集团拨款
  • 无形资产摊销的会计科目怎么录
  • 旅行社代订机票发票报销
  • 离职员工代缴社保协议
  • 在建工程怎么记账
  • 建账有哪几种方法
  • sql语句递归
  • winxp系统打不开
  • win7开始菜单在哪个文件夹
  • 进程registry
  • win8.1一直开机,无法进入主界面
  • linux修改分组
  • scrfs.exe - scrfs是什么进程 有什么用
  • win8.1无线
  • 系统界面通知
  • win7如何打开浏览器
  • WIN10安装网络打印机
  • linux创建vg
  • win7怎样设置屏幕保护密码
  • 蓝屏 win7
  • windows 10 开始菜单
  • 装了linux后windows没有了
  • 固定栏跑到了左边怎么弄
  • window.location.href用法
  • 层盖住下拉列表框问题解决方案
  • python scripy
  • vue瀑布流实现
  • 使用筷子就餐会不会传染乙肝病毒
  • 福建失业金领取几个月
  • 海关税怎么交 怎么算
  • 服务费交哪个税目的印花税
  • 农业企业制造费用包括哪些
  • 乌鲁木齐交通服务电话
  • 公司租房的房产税应计入哪个科目
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设