0

有人可以帮帮我吗。我需要将文件中的数据加载.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                        
4

3 回答 3

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"
)
于 2015-06-29T14:10:14.020 回答
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"
)
于 2015-06-29T15:00:21.480 回答
0

在 SQL*Loader 控制文件中使用函数

在 SQL*Loader 中使用 PLSQL 函数时,请使用引号。

这是控制文件中的第四列:

COL4 ":COL2*:COL3"

要查看它的使用情况,让我们创建一个测试表 MY_TABLE。

  1. 我们的测试表 MY_TABLE 的 DDL。

    CREATE TABLE SCOTT.MY_TABLE ( "COL1" NUMBER(9,0) NOT NULL ENABLE, "COL2" NUMBER(6,0), "COL3" NUMBER(6,0), "COL4" NUMBER(8,0) );

  2. 用这种方法创建一个测试控制文件。我包括了你的样本数据:

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

  1. 调用引用控制文件的 sqlldr 命令。

  2. 假脱机结果:

    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.
于 2015-06-29T21:35:05.107 回答