Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Oracle Новый топик    Ответить
 SQL loader должен работать  [new]
dmitri...
Member

Откуда: СПб
Сообщений: 92
Здравствуйте, при загрузке данных через SQL Loader в 2 таблицы из одного текстового файла получается не совсем понятная ситуация.
Имеется
а) исходный текстовый файл:

0;26.12.2007;01.07.2007;25.12.2007;16706
1;02.07.2007;425011Л158;Иванов И.И.;6000;0000010829
1;02.07.2007;425011Л158;Иванов И.И.;7000;0000010830
1;02.07.2007;425011Л158;Петров П.П.;8000;0000010831
1;02.07.2007;425011Л158;Петров П.П.;9000;0000010832
1;02.07.2007;425011Л158;Петров П.П.;10000;0000010833

b) сtl файл:
OPTIONS(ERRORS=0)
LOAD DATA 
INFILE 'C:\text_file\input_file.txt' 
BADFILE 'C:\text_file\bad_file.bad'
DISCARDFILE 'C:\text_file\dsc_file.dsc'
APPEND
into table date_intervals
when tmp_id='0'
fields terminated by ';' optionally enclosed by '"' TRAILING NULLCOLS
(tmp_id,dt_load,dt_from,dt_to,qty_of_lines)
INTO TABLE my_info_table
when tmp_id='1'
fields terminated by ';' optionally enclosed by '"' TRAILING NULLCOLS
(tmp_id,dt_load,sp_code_data,personal_data,summa,document_data)

c) таблица date_intervals:

CREATE TABLE date_intervals
(
  TMP_ID                     VARCHAR2(10),
  DT_LOAD                   DATE,
  DT_from                    DATE,
  DT_to                       DATE,
  qty_of_lines               NUMBER(10) 
)

d) таблица my_info_table:
CREATE TABLE my_info_table
(
  TMP_ID                   VARCHAR2(10),
  DT_LOAD                 DATE,
  SP_CODE                 VARCHAR2(40)                NOT NULL,
  PERSONAL_DATA       VARCHAR2(75),
  SUMMA                   NUMBER(10,2),
  DT_OPLATA             DATE,
  STATUS                  VARCHAR2(1),
  SHIFR_STUD_IN_DB   VARCHAR2(10),
  document_data        VARCHAR2(45)  
)

e) log файл:
...
Таблица date_intervals:
1 Строка успешно загружено.
0 Строки не загружены из-за ошибки в данных.
5 Строки не загружены из-за сбоев во всех фразах WHEN.
0 Строки не загружены из-за того, что все поля были пусты.


Таблица my_info_table:
0 Строки успешно загружено.
0 Строки не загружены из-за ошибки в данных.
6 Строки не загружены из-за сбоев во всех фразах WHEN.
0 Строки не загружены из-за того, что все поля были пусты.

...

Вопрос: почему-то грузит данные только в одну таблицу, в другую 0. Если запускать 2 ctl файла с условием when tmp_id=0/1, то грузит в рамках 1 ctl файла в начале в одну, затем в рамках 2-го ctl файла в другую.
Подозреваю, что здесь дело в какой-нибудь 'мелочи', в какой именно пока не увидел.
Заранее спасибо за ответы.
10 янв 08, 21:39    [5137041]     Ответить | Цитировать Сообщить модератору
 Re: SQL loader должен работать  [new]
OracleX
Member

Откуда:
Сообщений: 1998
...
into table date_intervals
when tmp_id='0'
fields terminated by ';' optionally enclosed by '"' TRAILING NULLCOLS
(tmp_id, dt_load,dt_from,dt_to,qty_of_lines)

INTO TABLE my_info_table
when tmp_id='1'
fields terminated by ';' optionally enclosed by '"' TRAILING NULLCOLS
(tmp_id POSITION (1),dt_load,sp_code,personal_data,summa,document_data)
11 янв 08, 01:17    [5137391]     Ответить | Цитировать Сообщить модератору
 Re: SQL loader должен работать  [new]
dmitri...
Member

Откуда: СПб
Сообщений: 92
Да, действительно теперь все стало правильно. Большое спасибо.
11 янв 08, 11:55    [5139063]     Ответить | Цитировать Сообщить модератору
 Re: SQL loader должен работать  [new]
dmitri...
Member

Откуда: СПб
Сообщений: 92
Здравствуйте, для этого же примера всплыл один доп вопрос..
исходный текстовый файл тот же, но с немного другими значениями:

0;26.12.2007;01.07.2007;25.12.2007;16706
1;02.07.2007;425011Л158;Иванов И.И.;6000;0000010829
1;02.07.2007;425011Л158;Иванов И.И.;7000;0000010830
1;02.07.2007;425011Л158;Петров П.П.;8000;0000010831
1;02.07.2007;01-5057;Петров П.П.;9000;0000010832
1;02.07.2007;0425011Л158;Петров П.П.;10000;0000010833

Для двух последних строк в результирующей таблице имеем соответственно:

1;02.07.2007;янв.57;Петров П.П.;9000;0000010832
1;02.07.2007;425011Л158;Петров П.П.;10000;0000010833

Т.е. произошло убирание нуля для одной строки и ненужное здесь преобразование в формат даты.
Конечно можно применить "", но есть ли способ изменить control file, чтобы грузить данные без 'переосмысления' их лоадером?
22 фев 08, 14:01    [5328569]     Ответить | Цитировать Сообщить модератору
 Re: SQL loader должен работать  [new]
dmitri...
Member

Откуда: СПб
Сообщений: 92
Прошу прощения, последний вопрос снимается, лоадер тут ни при чем.
22 фев 08, 14:18    [5328722]     Ответить | Цитировать Сообщить модератору
Все форумы / Oracle Ответить