Oracle sqlldr笔记

需求:有两列0X开头的guid,需要合并并转换为10进制数值。

控制文件如下:
LOAD DATA
INFILE “/home/xxxdbfile/xxxdb/xxx.txt”
truncate
INTO TABLE xxx_USER.TTTTTTABLE
FIELD TERMINATE BY “ ”
TRAILING NULLCOLS—这个是指如果上面的列中,有空的列载入,不报错
(
ID sequence(max,1),
GUID1,
GUID2,
ADD_TIME SYSDATE
guid “to_number(replace(:guid1,’0X’,)||replace(:guid2),’0X’,’XXXXXXXXXXXXXXXX’)”

)

序列:
id,sequence(max,1)
常量:
type CONSTANT “1”,
合并两列:
guid1,
guid2,
guid “to_number(replace(:guid1,’0X’,)||replace(:guid2),’0X’,’XXXXXXXXXXXXXXXX’)”
使用oracle函数一定要双引号。使用前面的字段,需要 加冒号:

但是这样有个问题:表必须得建立两个冗余字段guid1和guid2。
如果这样:
guid1 FILLER,
guid2 FILLER
导入的时候会报
SQL*Loader-291: Invalid bind variable GUID1 in SQL string for column GUID1这样的错误,
解决办法:
v_guid1 BOUNDFILLER,
v_guid2 BOUNDFILLER
“to_number(replace(:v_guid1,’0X’,)||replace(:v_guid2),’0X’,’XXXXXXXXXXXXXXXX’)”

这样v_guid1相当于一个变量了。

 

第二个问题,如果每个文件名是动态的,可以有两种方式:

1.    动态生成脚本,用shell写脚本sed替换

2.    ctl文件里面不指定数据文件名,而是写在外面。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值