sqlldr在插入oracle 查询long字段段时,一般需要注意些什么

使用sqlldr将VARCHAR2数据导入blob类型的字段中,需要在控制文件里添加什么?_百度知道
使用sqlldr将VARCHAR2数据导入blob类型的字段中,需要在控制文件里添加什么?
重启服务器端的SQL Server 2005服务,可以改成Automatic把Named Pipes和TCP&#47.
确保服务器端的SQL实例的远程调用是支持TIP&#47,在打开的页面中选择Surface Area Configuration for Services and Connections,确保SQL Server Agent和SQL Server Browser的服务也启动了;IP和named pipes的. 默认都是需要手动启动,把Using both TCP/IP and named pipes选中. 打开SQL Server Surface Area Configuration Manager,默认是DIP都修改为Enabled.选中实例的Remote Connections
其他类似问题
为您推荐:
varchar2的相关知识
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁二次元同好交流新大陆
扫码下载App
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!&&|&&
LOFTER精选
网易考拉推荐
用微信&&“扫一扫”
将文章分享到朋友圈。
用易信&&“扫一扫”
将文章分享到朋友圈。
阅读(2887)|
用微信&&“扫一扫”
将文章分享到朋友圈。
用易信&&“扫一扫”
将文章分享到朋友圈。
历史上的今天
loftPermalink:'',
id:'fks_095',
blogTitle:'Sqlldr的使用简介 及 Excel的导入',
blogAbstract:'
Sqlldr的函数关键字说明: Userid --oracle用户名 userid = username/password Control --控制文件名称 control = ‘e:\\insert.ctl’ Log –-日志文件名称 log = ‘e:\\insert.log’ Bad --损坏文件名称 Data --data file name Discard --discard file name Discardmax --number of discards to allow(默认全部) Skip --导入时跳过的记录行数(默认0) Load --导入时导入的记录行数(默认全部) Errors --允许错误的记录行数(默认50)
blogTag:'',
blogUrl:'blog/static/',
isPublished:1,
istop:false,
modifyTime:9,
publishTime:5,
permalink:'blog/static/',
commentCount:1,
mainCommentCount:1,
recommendCount:1,
bsrk:-100,
publisherId:0,
recomBlogHome:false,
currentRecomBlog:false,
attachmentsFileIds:[],
groupInfo:{},
friendstatus:'none',
followstatus:'unFollow',
pubSucc:'',
visitorProvince:'',
visitorCity:'',
visitorNewUser:false,
postAddInfo:{},
mset:'000',
remindgoodnightblog:false,
isBlackVisitor:false,
isShowYodaoAd:false,
hostIntro:'',
hmcon:'1',
selfRecomBlogCount:'0',
lofter_single:''
{list a as x}
{if x.moveFrom=='wap'}
{elseif x.moveFrom=='iphone'}
{elseif x.moveFrom=='android'}
{elseif x.moveFrom=='mobile'}
${a.selfIntro|escape}{if great260}${suplement}{/if}
{list a as x}
推荐过这篇日志的人:
{list a as x}
{if !!b&&b.length>0}
他们还推荐了:
{list b as y}
转载记录:
{list d as x}
{list a as x}
{list a as x}
{list a as x}
{list a as x}
{if x_index>4}{break}{/if}
${fn2(x.publishTime,'yyyy-MM-dd HH:mm:ss')}
{list a as x}
{if !!(blogDetail.preBlogPermalink)}
{if !!(blogDetail.nextBlogPermalink)}
{list a as x}
{if defined('newslist')&&newslist.length>0}
{list newslist as x}
{if x_index>7}{break}{/if}
{list a as x}
{var first_option =}
{list x.voteDetailList as voteToOption}
{if voteToOption==1}
{if first_option==false},{/if}&&“${b[voteToOption_index]}”&&
{if (x.role!="-1") },“我是${c[x.role]}”&&{/if}
&&&&&&&&${fn1(x.voteTime)}
{if x.userName==''}{/if}
网易公司版权所有&&
{list x.l as y}
{if defined('wl')}
{list wl as x}{/list}查看: 7324|回复: 10
问个菜鸟SQLLDR问题,控制文件怎么设置让字段导入默认值。
论坛徽章:1
问个菜鸟SQLLDR问题,控制文件怎么设置让字段导入默认值。
&&Load data INFILE 'C:\a.txt'
Append INTO TABLE TEST
&&(AAA position(1:2),BBB position(3:22),CCC position(23:25),DDD position(26:27))
怎样让CCC这个字段默认导入&CCC& 这3个字符,不要导入文本的实际数据。让数据库里面每一列的CCC字段都是这3个字母。
论坛徽章:23
在对应的字段后面加constant
论坛徽章:1
不行啊,分隔符的才可以加这个。定长的加了就报错。。
论坛徽章:23
我怎么行的?
(AAA position(1:2),BBB position(3:22),CCC constant &woshidapigu&,DDD position(26:27))
论坛徽章:23
我还特地帮你册了次
into table t1
(n1 position(1:2),n2 constant &aa&,n3 position(5:6))
论坛徽章:1
原帖由 hiber_zhu 于
16:36 发表
我还特地帮你册了次
into table t1
(n1 position(1:2),n2 constant &aa&,n3 position(5:6))
原来后面不用再跟position了。多谢多谢。
论坛徽章:23
不客气 我是来刷分的
论坛徽章:1
如果这是varchar2的是可以的,但这个类型是datetime 的就不行了,比如我就是想插入这个数据。
论坛徽章:23
自己研究 这个很简单的
论坛徽章:1
我试了,TO_DATE就可以了。。
itpub.net All Right Reserved. 北京皓辰网域网络信息技术有限公司版权所有    
 北京市公安局海淀分局网监中心备案编号: 广播电视节目制作经营许可证:编号(京)字第1149号精选国内外互联网行业最新文章及报告,让网友获得最新的海内外互联网动态
当前位置: >
Mysql的longblob字段插入数据问题解决
编辑:admin
在使用mysql的过程中,有个问题就是mysql的优化,mysql中longblob字段在5.5版本中默认的为1M。 想改变这个问题,需要注意几点: com.mysql.jdbc.PacketTooBigException: Packet for query is too large (2054817 & 1048576). You can change this value on the server by setting the max_allowed_packet' variable. 原因:myslq默认配置最小的需要更改 :在mysql.ini中配置参数(max_allowed_packet=1024M) ; 但是在[client]和[mysql]部分添加始终没有效果,貌似是客户端读取的参数。所以需要注意这点。网管之家
评论列表(网友评论仅供网友表达个人看法,并不表明本站同意其观点或证实其描述)
本类排行榜zylhsy 的BLOG
用户名:zylhsy
文章数:180
评论数:95
访问量:352857
注册日期:
阅读量:5863
阅读量:12276
阅读量:298965
阅读量:1019230
51CTO推荐博文
&SQLLDR应用举例【转】
1、普通装载&
INTO TABLE DEPT
FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '&'&
10,Sales,&&&USA&&&
20,Accounting,&Virginia,USA&&
30,Consulting,Virginia
40,Finance,Virginia
50,&Finance&,&&,Virginia&--loc 列将为空
60,&Finance&,,Virginia&&&--loc 列将为空
注:BEGINDATA后的数值前面不能有空格
2、TERMINATED BY WHITESPACE 和 FIELDS TERMINATED BY x'09' 的情况&
LOAD DATA&
INTO TABLE DEPT&
FIELDS TERMINATED BY WHITESPACE&
--FIELDS TERMINATED BY x'20'&
(DEPTNO,&&
BEGINDATA&
10 Sales Virginia
注:x'20'表示字符ASCII码的16进制数值
3、指定不装载那一列&
LOAD DATA&
INTO TABLE DEPT&
FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '&'&
(DEPTNO,&&
FILLER_1&FILLER,&--下面的 &Something Not To Be Loaded& 将不会被装载&&
BEGINDATA&
20,Something Not To Be Loaded,Accounting,&Virginia,USA&&&
4、position的列子&
LOAD DATA&
INTO TABLE DEPT&
(DEPTNO position(1:2),&&
DNAME position(*:16),&--这个字段的开始位置在前一字段的结束位置&&
LOC position(*:29),&&
ENTIRE_LINE position(1:29)&
BEGINDATA&
10Accounting Virginia,USA&&
结果:10 |&Accounting Vir&|&ginia,USA&|&10Accounting Virginia,USA
5、使用函数日期的一种表达TRAILING NULLCOLS的使用&
LOAD DATA&
INTO TABLE DEPT
FIELDS TERMINATED BY ','
TRAILING NULLCOLS
--这句的意思是将没有对应值的列都置为null
--如果第一行改为 10,Sales,Virginia,1/5/2000,, 就不用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&
10,Sales,Virginia,1/5/2000&
20,Accounting,Virginia,21/6/1999&
30,Consulting,Virginia,5/1/2000&
40,Finance,Virginia,15/3/2001&&
注:可以通过:dname类型调用函数,特别注意date函数的使用。
6、合并多行记录为一行记录
LOAD DATA&
concatenate 3&--通过关键字concatenate 把几行的记录看成一行记录&
INTO TABLE DEPT&
FIELDS TERMINATED BY ','&
(DEPTNO,&&
DNAME &upper(:dname)&,&&
LOC &upper(:loc)&,&&
LAST_UPDATED date 'dd/mm/yyyy'&
BEGINDATA&
注:例如有些文本文件以N行为一循环记录数据,则可以这样导入。
7、使用continueif来合并记录行
上例可直接使用continueif last=&','来告诉Oracle如果前一个数据以','结尾,则这个附加到上一行
LOAD DATA&
continueif last=&','
INTO TABLE DEPT&
FIELDS TERMINATED BY ','&
(DEPTNO,&&
DNAME &upper(:dname)&,&&
LOC &upper(:loc)&,&&
LAST_UPDATED date 'dd/mm/yyyy'&
BEGINDATA&
注:ContinueIf还可以使用this或next选项,具体操作见文档
8、载入每行的行号&&
LOAD DATA&
INTO TABLE DEPT
(DEPTNORECNUM //载入每行的行号&&
ENTIRE_LINEPosition(1:1024)
BEGINDATA&
fsdfasj&&&&&--自动分配行号到DEPTNO字段,此行为1&
fasdjfasdfl&--自动递增,此行为2
9、载入有换行符的数据
①使用一个非换行符的字符
LOAD DATA&
INTO TABLE DEPT&
FIELDS TERMINATED BY ','&
TRAILING NULLCOLS&
DNAME &upper(:dname)&,&
LOC &upper(:loc)&,&
LAST_UPDATED &my_to_date( :last_updated )&,&
COMMENTS &replace(:comments,'%%',chr(10))&&--用replace函数转换成换行符&
BEGINDATA&
10,Sales,Virginia,01-april-2001,This is the Sales%%Office in Virginia&
20,Accounting,Virginia,13/04/2001,This is the Accounting%%Office in Virginia&
30,Consulting,Virginia,14/04/:02,This is the Consulting%%Office in Virginia&
40,Finance,Virginia,,This is the Finance%%Office in Virginia&&
注:换行的特殊字符如果使用'\n',则会在Windows编译过程中直接换成换行符,导致无法转换
②使用fix属性
Load DATA&
INFILE demo1.dat &fix 68&&
INTO TABLE t1_a&
FIELDS TERMINATED BY ','&
TRAILING NULLCOLS&
DNAME &upper(:dname)&,&
LOC &upper(:loc)&,&
LAST_UPDATED Date 'dd/mm/yyyy',
ENTIRE_LINE&
demo1.dat&
10,aaaab,Virginia,01/05/2001,This is the aaaab
Office in Virginia
20,aaaac,Virginia,13/04/2001,This is the aaaac
Office in Virginia
30,aaaad,Virginia,14/04/2001,This is the aaaad
Office in Virginia
40,aaaae,Virginia,16/02/2001,This is the aaaae
Office in Virginia
注:fix只能加在外部文件数据导入时,另外需要每行数据长度都相等。
--下面这种方法也一样
Load DATA&
INFILE demo17.dat &fix 70&&
INTO TABLE t1_a&
FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '&'&
TRAILING NULLCOLS&
(DEPTNO,&&
DNAME &upper(:dname)&,&&
LOC &upper(:loc)&,&&
LAST_UPDATED Date 'dd/mm/yyyy',
ENTIRE_LINE&
demo2.dat&
10,aaaab,Virginia,01/05/2001,&This is the aaaab
Office in Virginia&
20,aaaac,Virginia,13/04/2001,&This is the aaaac
Office in Virginia&
30,aaaad,Virginia,14/04/2001,&This is the aaaad
Office in Virginia&
40,aaaae,Virginia,16/02/2001,&This is the aaaae
Office in Virginia&&
③ 使用var属性
Load DATA&
INFILE demo17.dat &var 3&&
INTO TABLE t1_a&
FIELDS TERMINATED BY ','&
TRAILING NULLCOLS&
(DEPTNO,&&
DNAME &upper(:dname)&,&&
LOC &upper(:loc)&,&&
LAST_UPDATED Date 'dd/mm/yyyy',
ENTIRE_LINE&
demo17.dat&
03510,Sales,Virginia,01/01/2001,This
03920,Accounting,Virginia,13/04/2001,Thi
04530,Consulting,Virginia,14/04/2001,This is t
07140,Finance,Virginia,14/04/2001,This is the Finance Office
in Virginia
注:var&3 表示前三位用于说明该条记录的长度 (但是谁告诉我长度怎么数的?-_-|||)
④使用str属性
可使用str来定义一个行结尾符&&
计算以|\r\n 结束的值:&
select utl_raw.cast_to_raw('|'||chr(13)||chr(10))&
结果 7C0D0A
Load DATA&
INFILE demo17.dat &str X'7C0D0A'&&
INTO TABLE t1_a&
FIELDS TERMINATED BY ','&
TRAILING NULLCOLS&
(DEPTNO,&&
DNAME &upper(:dname)&,&&
LOC &upper(:loc)&,&&
LAST_UPDATED Date 'dd/mm/yyyy',
ENTIRE_LINE&
demo17.dat&
10,Sales,Virginia,01/01/2001,This is the Sales&
Office in Virginia|
20,Accounting,Virginia,13/04/2001,This is the Accounting&
Office in Virginia|
30,Consulting,Virginia,14/04/2001,This is the Consulting&
Office in Virginia|
40,Finance,Virginia,14/04/2002,This is the Finance&
Office in Virginia
注意:同样需要在外部文件数据导入中使用,且最后一个不用加;另外注意不要有空格
10、nullif导入
INTO TABLE&t1_a
(DEPTNO position(1:2) integer external nullif DEPTNO='1',
--当导入deotno的值为'1'时,则该条记录不导入
DNAME&position(3:8)
注:需要注意的是在前面指定的数据类型以及后面的引号!
==========================================================================================================
Oracle SQL*Loader 使用指南(转载)
如何使用 SQL*Loader 工具
我们可以用Oracle的sqlldr工具来导入数据。例如:
sqlldr scott/tiger control=loader.ctl
控制文件(loader.ctl)将加载一个外部数据文件(含分隔符)
loader.ctl如下:
infile 'c:\data\mydata.csv'
into table emp
fields terminated by &,& optionally enclosed by '&'
(empno, empname, sal, deptno)
mydata.csv 如下:
10001,&Scott Tiger&, 1000, 40
10002,&Frank Naude&, 500, 20
下面是一个指定记录长度的示例控制文件。&*& 代表数据文件与此文件同名,即在后面使用BEGINDATA段来标识数据。
into table departments
( dept position (02:05) char(4),
deptname position (08:27) char(20)
COSC COMPUTER SCIENCE
ENGL ENGLISH LITERATURE
MATH MATHEMATICS
POLY POLITICAL SCIENCE
Unloader这样的工具
Oracle没有提供将数据导出到一个文件的工具。但是我们可以用SQL*Plus的select及 format 数据来输出到一个文件:
set echo off newpage 0 space 0 pagesize 0 feed off head off trimspool on
spool oradata.txt
select col1 || ',' || col2 || ',' || col3
where col2 = 'XYZ';
另外,也可以使用使用 UTL_FILE PL/SQL 包处理:
rem Remember to update initSID.ora, utl_file_dir='c:\oradata' parameter
fp utl_file.file_
fp := utl_file.fopen('c:\oradata','tab1.txt','w');
utl_file.putf(fp, '%s, %s\n', 'TextField', 55);
utl_file.fclose(fp);
当然你也可以使用第三方工具,如SQLWays ,TOAD for Quest等。
加载可变长度或指定长度的记录
INTO TABLE load_delimited_data
FIELDS TERMINATED BY &,& OPTIONALLY ENCLOSED BY '&'
TRAILING NULLCOLS
11111,AAAAAAAAAA
22222,&A,B,C,D,&
下面是导入固定位置(固定长度)数据示例:
INTO TABLE load_positional_data
(data1 POSITION(1:5),
data2 POSITION(6:15)
11111AAAAAAAAAA
22222BBBBBBBBBB
跳过数据行:
可以用&&SKIP n&&关键字来指定导入时可以跳过多少行数据。如:
INTO TABLE load_positional_data
SKIP 5&--似乎不行?需要在DOS层级下操作才有效
(data1 POSITION(1:5),
data2 POSITION(6:15)
11111AAAAAAAAAA
22222BBBBBBBBBB
导入数据时修改数据:
在导入数据到数据库时,可以修改数据。注意,这仅适合于常规导入,并不适合 direct导入方式.如:
INTO TABLE modified_data
(rec_no &my_db_sequence.nextval&,
region CONSTANT '31',
time_loaded &to_char(SYSDATE, 'HH24:MI')&,
data1 POSITION(1:5) &:data1/100&,
data2 POSITION(6:15) &upper(:data2)&,
data3 POSITION(16:22)&to_date(:data3, 'YYMMDD')&
11111AAAAAAAAAA991201
22222BBBBBBBBBB990112
INFILE 'mail_orders.txt'
BADFILE 'bad_orders.txt'
INTO TABLE mailing_list
FIELDS TERMINATED BY &,&
mailing_addr &decode(:mailing_addr, null, :addr, :mailing_addr)&,
mailing_city &decode(:mailing_city, null, :city, :mailing_city)&,
mailing_state
将数据导入多个表:
INTO TABLE emp
WHEN empno != ' '
( empno POSITION(1:4) INTEGER EXTERNAL,
ename POSITION(6:15) CHAR,
deptno POSITION(17:18) CHAR,
mgr POSITION(20:23) INTEGER EXTERNAL
INTO TABLE proj
WHEN projno != ' '
( projno POSITION(25:27) INTEGER EXTERNAL,
empno POSITION(1:4) INTEGER EXTERNAL
导入选定的记录:
如下例:&(01) 代表第一个字符, (30:37) 代表30到37之间的字符:
INFILE 'mydata.dat' BADFILE 'mydata.bad' DISCARDFILE 'mydata.dis'
INTO TABLE my_selective_table
WHEN (01) && 'H' and (01) && 'T' and (30:37) = ''
region CONSTANT '31',
service_key POSITION(01:11) INTEGER EXTERNAL,
call_b_no POSITION(12:29) CHAR
导入时跳过某些字段:
可用 POSTION(x:y) 来分隔数据. 在Oracle8i中可以通过指定 FILLER 字段实现。FILLER 字段用来跳过、忽略导入数据文件中的字段.如:
TRUNCATE INTO TABLE T1
FIELDS TERMINATED BY ','
field2 FILLER,
导入多行记录:
可以使用下面两个选项之一来实现将多行数据导入为一个记录:
CONCATENATE: - use when SQL*Loader should combine the same number of physical records together to form one logical record.
CONTINUEIF - use if a condition indicates that multiple records should be treated as one. Eg. by having a '#' character in column 1.
SQL*Loader 数据的提交:
一般情况下是在导入数据文件数据后提交的。
也可以通过指定&ROWS=&参数来指定每次提交记录数。
提高 SQL*Loader 的性能:
1) 一个简单而容易忽略的问题是,没有对导入的表使用任何索引和/或约束(主键)。如果这样做,甚至在使用ROWS=参数时,会很明显降低数据库导入性能。
2) 可以添加 DIRECT=TRUE来提高导入数据的性能。当然,在很多情况下,不能使用此参数。
3) 通过指定 UNRECOVERABLE选项,可以关闭数据库的日志。这个选项只能和 direct 一起使用。
4) 可以同时运行多个导入任务.
常规导入与direct导入方式的区别:
常规导入可以通过使用 INSERT语句来导入数据。Direct导入可以跳过数据库的相关逻辑(DIRECT=TRUE),而直接将数
============================================================================
控制根据数据不同插入不同的表
包括文件:日志文件;控制文件;坏记录文件;废弃记录文件(when)
1说明输入文件 infile后根文件名.默认扩展名为&.dat&
infile=&accounts&
用单引号& 括起文件名accounts.dat
2处理选项discardfile badfile
infile &accounts& discardfile mtidsc.rec badfile mthad.rec
3目标对象&&表
slqloader的用户必要有insert的权限.into table 开头
into table account_trans
when day between &01& and &31&
into table account_nbr
when account_type between &aa& and &zz&& 这样可以根据条件插入不同的表
4目标对象&-分区表或者某个分区
into table sale partition(east_data)&..
如果一次装在所有分区,可以用目标对象&-表的方法进行处理 into table sale&.
5记录生成模式&Insert,Replace,Append
Insert&缺省模式,装在之前,table必须为空表;;
Replace &先删除所有记录,然后装在满足when条件的行;(需要delete的权限)
Append&表中原有记录保存,加入新的行.;;
处理定长记录
infile &account.dat&
into table count_trans append
when year=&1990&
(account_nbr position(01:10) character,
day position(11:12) character,
month position(13:14) character,
transaction_code position(15:16) character,
credit_amount position(17:30) character)
into table count replace
when year&&1990&
(account_nbr position(01:10) character,
day position(11:12) character,
month position(13:14) character,
transaction_code position(15:16) character,
credit_amount position(17:30) character)
处理变长记录(从access到oracle)
分隔符:概念.在一行中将一项信息与另一项信息分离开的一个字符标记.
infile &customer.dat&
into table aa append
(customer_id char terminated by & &,
status char terminated by & &,
dsc_class char enclosed by & &,
source char terminated by whitespace)
1&单引号分割.末尾的信息项不已逗号结束,用关键字whitespace
FIELDS TERMINATED BY x&09& (制表符)
INTO TABLE DEPT1
FIELDS TERMINATED BY X&09&
10 Sales Virginia
by x&09&遇见一个制表符.它将输出一个直 也就是在制表符之间的数据
SVRMGR& host sqlldr scott/scott control=c:control.txt
SQL*Loader: Release 8.1.7.0.0 - Production on 星期六 8月 24 21:04:26 2002
(c) Copyright 2000 Oracle Corporation. All rights reserved.
达到提交点,逻辑记录计数1
SVRMGR& select *from dept1;
DEPTNO DNAME LOC
&&&- &&&&& &&&&-
已选择 1 行。
使用filler 跳过 在导入数据文本中不想进行导入的列
INTO TABLE DEPT
FIELDS TERMINATED BY &,&
DNAME &upper(:dname)&,
LOC &upper(:loc)&,
LAST_UPDATED date &dd/mm/yyyy&
10,Sales,Virginia,1/5/2000
20,Accounting,Virginia,21/6/1999
30,Consulting,Virginia,5/1/2000
40,Finance,Virginia,15/3/2001
u can see upper functions
sqlldr is a tool that can parse input variables and form its insert sql using bind values.
like normal controlfile
FIELDS TERMINATED BY &,&
LAST_UPDATED date
oracle&s sqlldr change it equal insert into table values(:deptno,:dname,:loc,:last_updated);
when load data sqlldr parse each record row and bind variables
once parse else execute!
DNAME &upper(:dname)&,
LOC &upper(:loc)&,
LAST_UPDATED date &dd/mm/yyyy&
sql : insert into table values(:deptno,upper(name),upper(:loc),:last_updated )
the & LAST_UPDATED date &dd/mm/yyyy& & inside date &dd/mm/yyyy& is only the variable &s datatype not functions
u can aslo use function to_date() then it deference
SVRMGR& host sqlldr scott/scott control=control.txt
SQL*Loader: Release 8.1.7.0.0 - Production on 星期日 8月 25 00:46:04 2002
(c) Copyright 2000 Oracle Corporation. All rights reserved.
达到提交点,逻辑记录计数4
SVRMGR& select *from dept1;
DEPTNO DNAME LOC LAST_UPDA
&&&- &&&&& &&&&- &&&
10 SALES VIRGINIA 01-5月 -0
20 ACCOUNTING VIRGINIA 21-6月 -9
30 CONSULTING VIRGINIA 05-1月 -0
40 FINANCE VIRGINIA 15-3月 -0
已选择4行。
TRAILING NULLCOLS
my compute just down i lose some article yet not been submit
i am so lazy not want to repeat just go on topic
about trailing nullcols
see the control file just TRAILING NULLCOls the purpose of our sqlldr is explicit. we want to load entire_line into table but it doesn&t exist in BEGINDATA segements .
so oracle provide a flag TRAILING NULLCOLS IF U DON&T USE IT ALL ROWS WILL BE DISCARD INTO DISCARD FILE IF U appoint it u shoud try what i said in no using TRAILING NULLCOLS mode
INTO TABLE DEPT
FIELDS TERMINATED BY &,&
TRAILING NULLCOLS
DNAME &upper(:dname)&,
LOC &upper(:loc)&,
LAST_UPDATED date &dd/mm/yyyy&,
ENTIRE_LINE &:deptno||:dname||:loc||:last_updated&
10,Sales,Virginia,1/5/2000
20,Accounting,Virginia,21/6/1999
30,Consulting,Virginia,5/1/2000
40,Finance,Virginia,15/3/2001
let&s goon
TRAILING NULLCOLS for u to appoint the last column a value &NULL& so in begindata it form a noexist column with value null
SVRMGR& select *from dept1;
DEPTNO DNAME LOC LAST_UPDA ENTIRE_LINE
&&&- &&&&& &&&&- &&& &&&&&&&&&&
10 SALES VIRGINIA 01-5月 -0 10SalesVirginia1/5/2000
40 FINANCE VIRGINIA 15-3月 -0 40FinanceVirginia15/3/2001
20 ACCOUNTING VIRGINIA 21-6月 -9 20AccountingVirginia21/6/1999
30 CONSULTING VIRGINIA 05-1月 -0 30ConsultingVirginia5/1/2000
已选择4行。
sqlldr with function is powerful magic
power function CASE When&..END relation discard file
just provide a controlf file
lazy to do it
&&&&&&&&&&&&&&&&
INTO TABLE DEPT
FIELDS TERMINATED BY &,&
TRAILING NULLCOLS
DNAME &upper(:dname)&,
LOC &upper(:loc)&,
LAST_UPDATED &case when length(:last_updated) &= 10
then to_date(:last_updated,&dd/mm/yyyy&)
else to_date(:last_updated,&dd/mm/yyyy hh24:mi:ss&)
10,Sales,Virginia,1/5/:03
20,Accounting,Virginia,21/6/1999
30,Consulting,Virginia,5/1/:00
40,Finance,Virginia,15/3/2001
sometimes customer give our data.txt date format are too different so we have ablility to create own functions
10,Sales,Virginia,01-april-2001
20,Accounting,Virginia,13/04/2001
30,Consulting,Virginia,14/04/:02
40,Finance,Virginia,
50,Finance,Virginia,02-apr-2001
60,Finance,Virginia,Not a date
i copy a good fucniton from TOM
create or replace
function my_to_date( p_string in varchar2 ) return date
type fmtArray is table of varchar2(25);
l_fmts fmtArray := fmtArray( &dd-mon-yyyy&, &dd-month-yyyy&,
&dd/mm/yyyy&,
&dd/mm/yyyy hh24:mi:ss& );
for i in 1 .. l_fmts.count
l_return := to_date( p_string, l_fmts(i) );
EXIT when l_
if ( l_return is null )
l_return :=
new_time( to_date(&&,&ddmmyyyy&) + 1/24/60/60 *
p_string, &GMT&, &EST& );
use of it if other format it would in bad file we kan reload it
使用sqlldr 应该注意的问题
1 不能选择使用哪个回滚段
装载的时候 使用replace 来slqldr时候 在装载之前,它会发出delete命令 这样将产生大量的回滚. 为了实现这个操作 你可能想要指定sqlldr使用一个特定的回滚段
你必须保证任何一个回滚段有足够的长度来容纳delete 或者使用truncate 选项 由于insert并没有产生过多的回滚,因为它只写 rowid into redo 理解没有问题吧??
2truncate选项 为truncate table t reuse storage
SQLLDR默认输入流为数据类型为CHAR 长度为 255 所以当 begindata section里面的 输入流 长于255 的时候会报错的
应该是 Record N Rejected Eorr for columnn
field in data file exceed max length
sqlldr希望你输入小于255字节或更少字节的数据,而获得的比这要多,解决的方法是在控制文件中只是单纯地使用 char(N) n是可以包括你输入列地最大长度
比方说load long类型 地时候 可以 输入 char(10000) ^_^
就到这里 大家如果发现有什么bug 请贴出来 thx
INTO TABLE DEPT
FIELDS TERMINATED BY &,& OPTIONALLY ENCLOSED BY &&&
FILLER_1 FILLER, //see it filler
20,Something Not To Be Loaded,Accounting,&Virginia,USA&
当装载数据时候 需要在输入记录中跳过各种不同的列是非常普通的
例如你想 装入 1.3.5列 跳过2.4列 可以利用filler
它可以让我们在数据流里面指定一个列 不把他放到数据库中
SVRMGR& host sqlldr scott/scott control=c:control.txt
SQL*Loader: Release 8.1.7.0.0 - Production on 星期六 8月 24 21:16:52 2002
(c) Copyright 2000 Oracle Corporation. All rights reserved.
达到提交点,逻辑记录计数1
SVRMGR& select *from dept1;
DEPTNO DNAME LOC
&&&- &&&&& &&&&-
20 Accounting Virginia,USA
==============================================================
了这篇文章
类别:┆阅读(0)┆评论(0)}

我要回帖

更多关于 sqlldr 截取字段 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信