位置: 编程技术 - 正文

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

  • 企业当期的所得税费用
  • 所得税费用是什么科目
  • 商务费用报销一般有哪些流程
  • 网上申购到发行多长时间
  • 其他业务收入在借方表示什么
  • 机动车检测公司上班时间
  • 冲减暂估成本的会计分录
  • 公司废品处理一定要入账吗
  • 个人所得税离职补偿金优惠政策
  • 去税务局申报需要带营业执照吗
  • 出口的港杂费包括哪些
  • 公共绿地绿化
  • 银行承兑逾期证明怎么写
  • 个体办税务登记需要带什么
  • 应付股东款可以结转实收资本吗
  • 基本户上的钱打到个人账户上,写什么用途
  • 管理费用是负的是什么意思
  • pos刷的钱能追回吗
  • 公立医院固定资产贷款相关规定
  • 合同印花税如何做账
  • 个人开增值税普票有没有限额
  • 一次性离职补偿个税
  • 餐厅开增值税普通发票
  • 免税发票可以入账吗
  • 内销征税是什么意思
  • 预缴企业所得税怎么做会计分录
  • 以公允价值模式后续计量的投资性房地产无须计提减值
  • 企业分红给企业股东怎么交税
  • 出口退税挂靠业务如何做帐?
  • 与建筑物有关的设计
  • bios设置技巧
  • 收到应收票据会计分录
  • 不能抵扣的费用
  • 预计负债属于什么类
  • php字符串定义的三种方式
  • 外地的社保在本地个税扣除
  • dl是什么文件
  • 玩游戏的显示器要高刷还是高分辨率
  • 应酬用的香烟
  • 贷款损失准备的作用
  • 变动成本产品成本包括哪些
  • syms命令
  • 学人工智能哪家机构比较好
  • 新准则下担保企业有哪些
  • 应交税费下的科目设置
  • 发票税金计入什么会计科目
  • 培训费发票是否含税
  • wordpress怎么降级
  • 不能抵扣的进项税转出账务处理
  • 预收账款多好还是少好
  • phpcms添加内容
  • 公司代扣代缴个人所得税是怎么算的
  • 如何查询发票领购日期
  • 财政拨付注册资本金说明
  • MySQL进阶SELECT语法篇
  • 母子公司关联交易规定
  • 固定资产处置需要交税吗?
  • 标书费没有发票合理吗
  • 销售货物海运费会计分录
  • 长期待摊费用摊销计算公式
  • 装修费用摊销计入什么科目
  • 成本核算方法是移动加权平均法吗
  • 出纳建账的基本流程
  • sqlserver 17051解决方案
  • 系统盘如何重装
  • 老毛桃U盘装系统综合教程
  • windows软件类型最新版本
  • macbookpro如何开启查找我的mac
  • eclipce System.loadLibrary报错
  • js修改值
  • css使用教程
  • python怎么学啊
  • [置顶]JM259194
  • 前端js优化
  • android的数据储存方式
  • jquery网页设计
  • 走出JavaScript初学困境—js初学
  • jQuery之简单的表单验证实例
  • 漯河经济开发区税务局电话
  • 河南省2020年12月纳税申报截止日期
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设