有人可以帮助我。
我需要将.dat
文件中的数据加载到表中。
.DAT
文件包含Col1,Col2,Col3
表格有Col1, Col4
我想要的是
Table.Col4 = DAT File Col2*Col3
如何通过SQLLDR和CTL文件实现此目的。 注意DAT文件中的列可以是可变长度。
eg DAT File:
110000002 , 1 , 7500
110000003 , 1 , 7500
110000008 , 1 , 7500
110000028 , 1 , 7500
110000054 , 1 , 7500
110000055 , 1 , 7500
110000082 , 1 , 7500
110000095 , 1 , 7500
答案 0 :(得分:0)
我想你可以尝试这个ctl文件:
load data
infile 'my_file.dat'
truncate
into table my_table
fields terminated by ','
(
COL1,
COL2 boundfiller,
COL3 boundfiller,
COL4 expression ":COL2 * :COL3"
)
答案 1 :(得分:0)
您好这里是您需要放入控制文件的代码。 它将起作用,因为col1将从第一个字符串获取值直到','然后第二个和第三个列值被保存到变量INPUTCOL2和INPUTCOL3中,最后我们将这两个值组合在col4中,这是你的表的列乘法。
LOAD DATA
INFILE 'mydata.dat'
INSERT
INTO TABLE MY_table
fields terminated by ','
trailing nullcols
(
COL1,
INPUTCOL2 BOUNDFILLER,
INPUTCOL3 BOUNDFILLER,
COL4 ":INPUTCOL2*:INPUTCOL3"
)
答案 2 :(得分:0)
在SQL * Loader控制文件中使用函数
在SQL * Loader中使用PLSQL函数时,请使用引号。
以下是控制文件中的第4列:
COL4 ":COL2*:COL3"
要看到这个使用,让我们创建一个测试表,MY_TABLE。
我们的测试表的DDL,MY_TABLE。
CREATE TABLE SCOTT.MY_TABLE
(
"COL1" NUMBER(9,0) NOT NULL ENABLE,
"COL2" NUMBER(6,0),
"COL3" NUMBER(6,0),
"COL4" NUMBER(8,0)
);
使用此方法创建测试控制文件。我包含了您的示例数据:
LOAD DATA
INFILE *
BADFILE 'MY_TABLE.bad'
DISCARDFILE 'MY_TABLE.dsc'
INSERT
INTO TABLE MY_TABLE
FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY ' ' TRAILING NULLCOLS
(
COL1,
COL2,
COL3,
COL4 ":COL2*:COL3"
)
BEGINDATA
110000002 , 1 , 7500
110000003 , 2 , 7500
110000008 , 1 , 7500
110000028 , 3 , 7500
110000054 , 1 , 7500
110000055 , 1 , 7500
110000082 , 4 , 7500
110000095 , 5 , 7500
调用引用控制文件的sqlldr命令。
假脱机结果:
SCOTT@tst>SELECT
2 *
3 FROM
4 my_table;
COL1 COL2 COL3 COL4 ---------- ---------- ---------- ---------- 110000002 1 7500 7500 110000003 2 7500 15000 110000008 1 7500 7500 110000028 3 7500 22500 110000054 1 7500 7500 110000055 1 7500 7500 110000082 4 7500 30000 110000095 5 7500 37500 8 rows selected.