SQL*load 中var属性测试
今日在群中有朋友问到var这个属性的含义,网络上好多文章只是举例说明,描述的含糊,而且window和unix下的示例是完全不能互相照搬的,这里测试了一下,以下是测试结果.
对于sqlload的标准写法和基本用法我们不做描述,直接奔主题.
ldr_1.dat
06110,SMITH,SALES MANAGER,This is SMITH.
He is a Sales Manager.
06311,ALLEN.W,TECH MANAGER,This is ALLEN.W.
He is a Tech Manager.
05516,BLAKE,HR MANAGER,This is BLAKE.
He is a Hr Manager.
ldr_1.ctl
LOAD DATA
INFILE ldr_1.dat "var 3"
TRUNCATE INTO TABLE manager
FIELDS TERMINATED BY ','
(MGRNO,MNANE,JOB,REMARK)
SQL> select * from manager; MGRNO MNANE JOB REMARK---------- ------------------------------ ------------------------------ ---------------------------------------- 10 SMITH SALES MANAGER This is SMITH. He is a Sales Manager. 11 ALLEN.W TECH MANAGER This is ALLEN.W. He is a Tech Manager. 16 BLAKE HR MANAGER This is BLAKE. He is a Hr Manager.
说明:
var 3表示,每一行数据的前3个字符为指示该行记录的长度。 n为多少根据你自己来定,你可以3个字符(字节)表示长度,也可以用4个字符来表示长度。
不足前面可以补0。但是该数字为后面每行记录的具体长度值.
我们这里为"3”,就是061/063/055 是这三行记录的长度值,我们怎么计算长度值呢,推荐两个方法
1.使用ue查看
2.使用wc –c ,去掉061这三长度,就是64-3=61
这样的描述大家应该明白了吧?还有个说明就是win平台的回车符是由两个字符组成(回车+换行),而unix下是一个.
大家可以把var 换成别的数字看看,对于sqlload的处理非定长且包含换行符的数据,应用还是比较少的.