关于Oracle中使用SQLLDR有时候会出现关于空格保留或去除的问题,就这个问题的解决方案有不少,但如果是由于参数设置问题,可能就本文所说的问题解决。
参考文章: http://blog.sina.com.cn/s/blog_701218960100l0gt.html
使用SQLLDR加载入库,一般就使用分隔符取值或者定长取值。使用分隔符取值时,空格是会保留的,而使用定长取值的时候就会自动去除空格(本文所说空格指内容前后的空格,不包括文字中的空格)。
关于参数“PRESERVE BLANKS”
SQLLDR中有一个参数“PRESERVE BLANKS”,用于控制定长时的空格保留。
当 input file 是分隔符时,control file 中的 PRESERVE BLANKS 无效;
当 input file 是定长时,control file 中的 PRESERVE BLANKS 有效。
所以,定长取值时,可以加 PRESERVE BLANKS 这个参数,保留空格入库。
可以在 TRUNCATE INTO TABLE 中加入该参数,全部字段都保留空格,如:
LOAD DATA
CHARACTERSET 'UTF8'
INFILE '/home/a.dat'
TRUNCATE PRESERVE BLANKS INTO TABLE A
(
a POSITION(1:5),
b POSITION(6:11),
d POSITION(12:13)
)
也可以在字段后加如该参数,只保留该字段空格,如:
LOAD DATA
INFILE '/home/a.dat'
TRUNCATE INTO TABLE A
(
a POSITION(1:5),
b POSITION(6:11) PRESERVE BLANKS ,
d POSITION(12:13)
)
利用trim()去除空格
定长取值默认是自动去除空格的,而分隔符取值则会保留空格入库。所以,去除空格可以利用trim()
函数。如:
LOAD DATA
CHARACTERSET 'UTF8'
INFILE '/home/a.txt'
TRUNCATE INTO TABLE A
FIELDS TERMINATED BY '|'
(
a "trim(:a)",
b "trim(:b)",
d "trim(:d)"
)
总结
对于SQLLDR保留或去除空格,可以分按如下操作:
- 定长:
- 保留:加入参数 PRESERVE BLANKS
- 去除:默认去除,无需操作
- 分隔符:
- 保留:默认保留
- 去除:使用
trim()
函数
本文由 小TiD笔记 发布在小TiD笔记,转载此文请保持文章完整性,并请附上文章来源(小TiD笔记)及本页链接。
原文链接: https://www.tidnotes.ga/2020/03/sql-sqlldr-kong.html
[SQL]关于锁表以及解决方法
数据库锁表,指在数据库里,同一个数据可能有多个人来读取或更改,为了防止更改的时候别人也同时更改,所以要锁住表防 […]
Markdown基本语法
最近写GitHub上的README.md文件,要用到Markdown语法,所以本文总结一下用于写 .md,.m […]