位置: 编程技术 - 正文

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

  • 小规模纳税人怎么办理
  • 收到个税手续费返还增值税税率
  • 海关完税凭证抵扣清单在哪里
  • 卷烟批发环节消费税纳税义务发生时间
  • 损益类科目是否可以转出
  • 收到红字进项发票需要认证么
  • 工程项目成本控制的方法
  • 耕地占用税滞纳金是否能减免
  • 购货方非增值税一般纳税人
  • 应付未付的款项如何税务处理
  • 合同印花税如何做账
  • 国企不交社保怎么办
  • 购买固定资产的进口关税
  • 企业销售货物因违规处罚
  • 重点创业人群
  • 采购合同的运作过程为
  • 金融企业准备金计提管理办法最新
  • 现金购入库存商品的分录
  • 材料票可以直接在税务局开吗
  • 水利建设基金从铁路建设基金港口建设费收入中提取5%
  • 关闭 ipv6
  • 研发费中废料收入怎么处理
  • 企业接到银行收账通知
  • Win11错误提示"the pc must support secure boot"怎么解决
  • 代扣代缴个人所得税账务处理
  • 小微企业减免额怎么计算
  • 穆尔官网
  • 季度利润表中的营业收入怎么算
  • php pdo类
  • 测试费计入什么会计科目
  • php ajax 教程
  • 一文详解卡尔曼人物形象
  • 餐厅的打包盒一般是多少毫升
  • 如何填写个人所得税申报表
  • 纳税申报系统里怎么填写
  • java委托模式和代理模式
  • Python变量中forain
  • 分类信息有哪些网站
  • 预交的诉讼费怎么做账
  • 起征点税种
  • 罚款支出计入什么费用
  • 企业与企业之间通过互联网进行产品
  • 业务招待费的范畴
  • 建筑企业预缴所得税税率是多少
  • 运输企业税负率一般控制在多少?
  • 没有发票的费用怎么报销
  • 增值税期末留抵税额是什么意思
  • 管理费用记错了跨年了怎么调整
  • 收不回来的应收账款
  • 固定资产折旧成本票据类型
  • 基金会收到捐款的会计分录
  • 应收票据和应收账款减少说明什么
  • 分配间接成本的计算公式
  • SQL Server中通配符的使用示例
  • SQL语句实现表的创建
  • myeclipse连接mysql失败
  • mysql主从复制原理详解
  • win7提示盗版怎样激活
  • 分布式交互
  • u盘发光
  • ubuntu服务器安装matlab2014a环境配置
  • windows 命令行 ftp
  • windows xp
  • win7系统开机
  • win8功能大全介绍
  • win10登陆背景修改器
  • script_tool_for_linux.bash: Linux 环境下的 hosts 一键部署脚本
  • 批处理在windows中的典型应用
  • python的正则语法
  • Unsolved bug in fltk-1.1.10/src/filename_list.cxx for scandir --已解决!
  • 批处理应用实例
  • ug输入代码
  • js实现兼容性较好的方法
  • jquery 插件编写
  • jquery实现简单Tab切换菜单效果
  • 遵从与尊从
  • 国家税务局查验发票显示网络异常
  • 新疆高龄补贴2024发放标准是多少
  • 税务局如何查询社保明细
  • 营业税发票丢失能否开增值税普票
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设