Управление данными и загрузка через SQLLDR

Может кто-нибудь, пожалуйста, помогите мне. Мне нужно загрузить данные из .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 ответа

Я думаю, вы могли бы попробовать этот файл CTL:

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

Привет Вот код, который вы должны поместить в контрольный файл. он будет работать, так как 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"
)

Использование функций в управляющем файле SQL*Loader

При использовании функций PLSQL в SQL*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

  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.
Другие вопросы по тегам