Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Вопрос по работе с внешними таблицами в Oracle / 9 сообщений из 9, страница 1 из 1
30.06.2016, 17:55:53
    #39265820
menja_zovut_deniska
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос по работе с внешними таблицами в Oracle
Привет.
Если файл с данными, которые необходимо загрузить в табличку. Но необходимо отбросить файл, если хотя бы одно поле в любой строке null.
Я предполагал, что этому поспособствуют два параметра:
1. Установка Reject Limit в 0.
2. Не установка MISSING FIELD VALUES ARE NULL, т.к. в доке написано
"If MISSING FIELD VALUES ARE NULL is not specified, and there is not enough data in the record for all fields, then the row is rejected."

Записи в файле состоят из 3-х полей с разделителем ';'.
При установке среднего значения в null все записи, включая с null, замечательно выбираются.
Пример(Первая запись некорректная. Вторая корректная)
663480561;;40
661079585;28/03/2016;40

Скрипт создания
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
create table EXT_DATA
(
  ed_number      NUMBER,
  date_end       DATE,
  code_var       NUMBER,
  num_str        NUMBER
)
organization external
(
  type ORACLE_LOADER
  default directory DUMPDIR
  access parameters 
  (
    Records Delimited BY NewLine 
     CHARACTERSET CL8MSWIN1251
     logfile DUMPDIR:'DATA.LOG' badfile DUMPDIR:'DATA.BAD'
     Fields Terminated BY ';'
  
    (ed_number     char(4000) ,
     date_end      char(4000) DATE_FORMAT DATE MASK 'dd/mm/yyyy hh24:mi:ss',
     code_var      char(4000) , 
     num_str       RECNUM)
  )
    location (DUMPDIR:'DATA.TXT')
)
reject limit 0;
...
Рейтинг: 0 / 0
01.07.2016, 04:02:35
    #39265991
Вячеслав Любомудров
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос по работе с внешними таблицами в Oracle
menja_zovut_deniska
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
create table EXT_DATA
(
  ed_number      NUMBER NOT NULL,
  date_end       DATE NOT NULL,
  code_var       NUMBER NOT NULL,
  num_str        NUMBER NOT NULL
)
organization external
...
reject limit 0;
...
Рейтинг: 0 / 0
04.07.2016, 15:21:52
    #39267424
menja_zovut_deniska
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос по работе с внешними таблицами в Oracle
Вячеслав Любомудров,
ora-30657
Операция не поддерживается во внешних таблицах
...
Рейтинг: 0 / 0
04.07.2016, 18:04:19
    #39267594
suPPLer
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос по работе с внешними таблицами в Oracle
menja_zovut_deniska2. Не установка MISSING FIELD VALUES ARE NULL, т.к. в доке написано
"If MISSING FIELD VALUES ARE NULL is not specified, and there is not enough data in the record for all fields, then the row is rejected."
Не совсем. При загрузке с разделителями количество значений в строке считается по разделителям, причём у последнего значения разделитель может быть опущен, если оно не пустое. Поэтому пройдёт даже строка ";;;".

Можно написать скрипт для предварительной обработки, который будет заменять в строках ";;" на ";", а после убирать ";" в начале строки. RTFM PREPROCESSOR .
...
Рейтинг: 0 / 0
07.07.2016, 12:29:15
    #39269618
Aliona
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос по работе с внешними таблицами в Oracle
menja_zovut_deniskaПривет.
Если файл с данными, которые необходимо загрузить в табличку. Но необходимо отбросить файл, если хотя бы одно поле в любой строке null.

В табличке-приёмнике на всех полях поставьте NOT NULL.

Если это сделать нельзя, грузите данные из текстового файла сначала в промежуточную таблицу (в кажом поле NOT NULL), а потом из ней в таблицу-приёмник.
...
Рейтинг: 0 / 0
07.07.2016, 16:21:11
    #39269979
SY
SY
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос по работе с внешними таблицами в Oracle
AlionaЕсли это сделать нельзя, грузите данные из текстового файла сначала в промежуточную таблицу (в кажом поле NOT NULL), а потом из ней в таблицу-приёмник.

NOT NULL, как уже говорилось, с external table не пляшет. Reject не получится, а вот discard можно:

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
create table EXT_DATA
(
  ed_number      NUMBER,
  date_end       DATE,
  code_var       NUMBER,
  num_str        NUMBER
)
organization external
(
  type ORACLE_LOADER
  default directory TEMP
  access parameters 
  (
    Records Delimited BY NewLine 
     LOAD WHEN (ed_number != BLANKS and date_end != BLANKS and code_var != BLANKS and num_str != BLANKS)
     Fields Terminated BY ';'
    (ed_number     char(4000) ,
     date_end      char(4000) DATE_FORMAT DATE MASK 'dd/mm/yyyy hh24:mi:ss',
     code_var      char(4000) , 
     num_str       RECNUM)
  )
    location ('DATA.TXT')
)
reject limit 0;



DATA.txt:

Код: plsql
1.
2.
1;7/7/2016 11:00:00;1;1
1;;;1



Код: plsql
1.
2.
3.
4.
5.
6.
7.
SQL> select * from EXT_DATA;

 ED_NUMBER DATE_END    CODE_VAR    NUM_STR
---------- --------- ---------- ----------
         1 07-JUL-16          1          1

SQL> 




В лoге:

Код: plsql
1.
KUP-04102: record 2 discarded from file c:\temp\DATA.TXT



В discard файле:

Код: plsql
1.
1;;;1



SY.
...
Рейтинг: 0 / 0
07.07.2016, 16:46:58
    #39270011
SY
SY
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос по работе с внешними таблицами в Oracle
Упустил "необходимо отбросить файл, если хотя бы одно поле в любой строке null". Тогда eще проще:

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
SQL> create table EXT_DATA
  2  (
  3    ed_number      NUMBER,
  4    date_end       DATE,
  5    code_var       NUMBER,
  6    num_str        NUMBER
  7  )
  8  organization external
  9  (
 10    type ORACLE_LOADER
 11    default directory TEMP
 12    access parameters 
 13    (
 14      Records Delimited BY NewLine 
 15       Fields Terminated BY ';'
 16      (ed_number     char(4000) ,
 17       date_end      char(4000) DATE_FORMAT DATE MASK 'dd/mm/yyyy hh24:mi:ss',
 18       code_var      char(4000) , 
 19       num_str       RECNUM)
 20    )
 21      location ('DATA.TXT')
 22  )
 23  reject limit 0
 24  /

Table created.

SQL> with t as (
  2             select  e.*,
  3                     sum(
  4                         case
  5                           when ed_number is null then 1
  6                           when date_end  is null then 1
  7                           when code_var  is null then 1
  8                           when num_str   is null then 1
  9                         else 0
 10                         end
 11                        ) over() flag
 12               from  ext_data e
 13            )
 14  select  ed_number,
 15          date_end,
 16          code_var,
 17          num_str
 18    from  t
 19    where flag = 0
 20  /

no rows selected

SQL>  



Удаляем "плохую" зaпись из DATA.txt:

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
SQL> with t as (
  2             select  e.*,
  3                     sum(
  4                         case
  5                           when ed_number is null then 1
  6                           when date_end  is null then 1
  7                           when code_var  is null then 1
  8                           when num_str   is null then 1
  9                         else 0
 10                         end
 11                        ) over() flag
 12               from  ext_data e
 13            )
 14  select  ed_number,
 15          date_end,
 16          code_var,
 17          num_str
 18    from  t
 19    where flag = 0
 20  /

 ED_NUMBER DATE_END    CODE_VAR    NUM_STR
---------- --------- ---------- ----------
         1 07-JUL-16          1          1

SQL> 



SY.
...
Рейтинг: 0 / 0
08.07.2016, 13:43:13
    #39270560
Aliona
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос по работе с внешними таблицами в Oracle
SYAlionaЕсли это сделать нельзя, грузите данные из текстового файла сначала в промежуточную таблицу (в кажом поле NOT NULL), а потом из ней в таблицу-приёмник.

NOT NULL, как уже говорилось, с external table не пляшет.
SY.

Я не про вyеншние таблицы писала, а про обычные.
таблица- приёмник обычная оракловая таблица. :)

Если из текстового файла надо выкинуть строки с пустыми полями, грузите данные из этой внешней таблицы в обычную таблицу с NOT NULL, строки с пустыми полями не загрузятся, преобразуйте данные в этой таблицы, как хотите, а потом данные выгружайте опять в текстовый файл.
это просто задача на сообразительность.
...
Рейтинг: 0 / 0
08.07.2016, 14:11:06
    #39270596
dbms_photoshop
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос по работе с внешними таблицами в Oracle
AlionaSYпропущено...


NOT NULL, как уже говорилось, с external table не пляшет.
SY.

Я не про вyеншние таблицы писала, а про обычные.
таблица- приёмник обычная оракловая таблица. :)

Если из текстового файла надо выкинуть строки с пустыми полями, грузите данные из этой внешней таблицы в обычную таблицу с NOT NULL, строки с пустыми полями не загрузятся, преобразуйте данные в этой таблицы, как хотите, а потом данные выгружайте опять в текстовый файл .
это просто задача на сообразительность.Индусы бы оценили сообразительность и подход.
...
Рейтинг: 0 / 0
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Вопрос по работе с внешними таблицами в Oracle / 9 сообщений из 9, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]