如何替换 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>