通过SQLLDR处理数据和加载

时间:2015-06-29 12:48:47

标签: oracle sql-loader ctl

有人可以帮助我。 我需要将.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                        

3 个答案:

答案 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。

  1. 我们的测试表的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) );

  2. 使用此方法创建测试控制文件。我包含了您的示例数据:

  3. 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;

    3.      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.