【问题标题】:Manipulating Data and Loading via SQLLDR通过 SQLLDR 操作数据和加载
【发布时间】:2015-06-29 12:48:47
【问题描述】:

谁能帮帮我。 我需要将.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                        

【问题讨论】:

  • 请编辑您的问题并在 .dat 文件中包含数据示例。谢谢。
  • @BobJarvis,我已编辑,请检查您是否可以帮助我。

标签: oracle sql-loader ctl


【解决方案1】:

您好,这是您需要放入控制文件的代码。 它将起作用,因为 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】:

    我想你可以试试这个 ctl 文件:

    load data
    infile 'my_file.dat'
    truncate
    into table my_table
    fields terminated by ','
    (
      COL1,
      COL2 boundfiller,
      COL3 boundfiller,
      COL4 expression ":COL2 * :COL3"
    )
    

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-06-24
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-11-23
        • 1970-01-01
        • 2017-09-29
        • 2012-05-28
        相关资源
        最近更新 更多