如何替换 sqlldr 值
How to replace sqlldr values
我的原始文件如下
bbbb 1000 Open 1000 Dep 12/03/2010
dddd 1001 Open 2000 Loan 13/01/2019
eeee 1003 Dor 3000 Dep 11/04/1965
Sqlldr 控制文件
load data
infile *
truncate into table Mytab
fields
trailing nullcols
(
Name position (1:4),
Acc position(6:9),
Status Position(11:14),
Amt position(15:18),
type position(20:23),
Date position(24:33)
)
begin data
我需要带有连字符 (-) 而不是斜线 (/) 符号的日期列。
12/03/2010 -- 12-03-2010
Date position(24:33)
---> 这里不得不提一下
如果您还提供 mytab
描述,将会有所帮助。因为,“日期”列(其名称无效;它是为数据类型名称保留的。我将其重命名为“Datum”)应该是date
数据类型,而您似乎使用varchar2
。在任何一种情况下,您都可以使用适当的函数,用双引号括起来。我使用了 replace
,因为它满足了您的要求。
这是一个例子:
控制文件(你的无效,因为它不符合数据格式;我修正了它):
load data
infile *
truncate into table Mytab
fields
trailing nullcols
(Name position(1:4),
Acc position(6:9),
Status position(11:14),
Amt position(16:19),
type position(21:24),
Datum position(26:35) "replace(:datum, '/', '-')"
)
begindata
bbbb 1000 Open 1000 Dep 12/03/2010
dddd 1001 Open 2000 Loan 13/01/2019
eeee 1003 Dor 3000 Dep 11/04/1965
正在加载会话和结果:
SQL> $sqlldr scott/tiger@xe control=test34.ctl log=test34.log
SQL*Loader: Release 11.2.0.1.0 - Production on Sri O×u 24 07:54:46 2021
Copyright (c) 1982, 2009, Oracle and/or its affiliates. All rights reserved.
Commit point reached - logical record count 3
SQL> select * from mytab;
NAME ACC STATUS AMT TYPE DATUM
---------- ---------- ---------- ---------- ---------- ----------
bbbb 1000 Open 1000 Dep 12-03-2010
dddd 1001 Open 2000 Loan 13-01-2019
eeee 1003 Dor 3000 Dep 11-04-1965
SQL>
我的原始文件如下
bbbb 1000 Open 1000 Dep 12/03/2010
dddd 1001 Open 2000 Loan 13/01/2019
eeee 1003 Dor 3000 Dep 11/04/1965
Sqlldr 控制文件
load data
infile *
truncate into table Mytab
fields
trailing nullcols
(
Name position (1:4),
Acc position(6:9),
Status Position(11:14),
Amt position(15:18),
type position(20:23),
Date position(24:33)
)
begin data
我需要带有连字符 (-) 而不是斜线 (/) 符号的日期列。
12/03/2010 -- 12-03-2010
Date position(24:33)
---> 这里不得不提一下
如果您还提供 mytab
描述,将会有所帮助。因为,“日期”列(其名称无效;它是为数据类型名称保留的。我将其重命名为“Datum”)应该是date
数据类型,而您似乎使用varchar2
。在任何一种情况下,您都可以使用适当的函数,用双引号括起来。我使用了 replace
,因为它满足了您的要求。
这是一个例子:
控制文件(你的无效,因为它不符合数据格式;我修正了它):
load data
infile *
truncate into table Mytab
fields
trailing nullcols
(Name position(1:4),
Acc position(6:9),
Status position(11:14),
Amt position(16:19),
type position(21:24),
Datum position(26:35) "replace(:datum, '/', '-')"
)
begindata
bbbb 1000 Open 1000 Dep 12/03/2010
dddd 1001 Open 2000 Loan 13/01/2019
eeee 1003 Dor 3000 Dep 11/04/1965
正在加载会话和结果:
SQL> $sqlldr scott/tiger@xe control=test34.ctl log=test34.log
SQL*Loader: Release 11.2.0.1.0 - Production on Sri O×u 24 07:54:46 2021
Copyright (c) 1982, 2009, Oracle and/or its affiliates. All rights reserved.
Commit point reached - logical record count 3
SQL> select * from mytab;
NAME ACC STATUS AMT TYPE DATUM
---------- ---------- ---------- ---------- ---------- ----------
bbbb 1000 Open 1000 Dep 12-03-2010
dddd 1001 Open 2000 Loan 13-01-2019
eeee 1003 Dor 3000 Dep 11-04-1965
SQL>