2015-06-29 53 views
0

有人可以帮助我。 我需要将数据从.dat文件加载到表中。操作数据并通过SQLLDR加载

.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

请编辑您的问题,包括在.dat文件中的数据的一个例子。谢谢。 –

+0

@BobJarvis,我已经编辑过了,请检查你是否可以帮助我。 – ShobhitSaxena

+0

请参阅[此处为示例](https://community.oracle.com/thread/558188?start=0&tstart=0) – OldProgrammer

回答

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" 
) 
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" 
) 
0

在SQL * Loader控制文件

的功能使用当在SQL中使用PLSQL函数* Loader的,使用的报价。

这里是列数四位来自控制文件:

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. 创建这种方法测试控制文件。我包括示例数据:

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命令引用控制文件。

  • 后台处理结果:

    [email protected]>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.