Запись данных из текстового файла в Таблицу. Итересный формат разделения rows в файле

iudey
Дата: 26.02.2007 00:59:29
считываи данные с файла при помощи внешней таблицы:

CREATE TABLE dagimp_ext (PersNr char(10),
Antrart char(2),
Vorgart char(2),
Fiktion char (2),
Inventar char (2),
GegTyp char (2),
GegID char (4),
Antragsnr char (8),
Antragsdat char (8),
Status char (2),
AendStatus char (8),
Gegenstandschluessel char (4),
Gegenstandlangtext char (254),
InvNummer char (8),
MaxAnzahl char (4),
ProdProb char (5),
Verlaengerung char (1)
)
ORGANIZATION EXTERNAL (TYPE ORACLE_LOADER DEFAULT DIRECTORY ext_dir
ACCESS PARAMETERS (RECORDS FIXED 326 FIELDS
(PersNr char(10),
Antrart char(2),
Vorgart char(2),
Fiktion char (2),
Inventar char (2),
GegTyp char (2),
GegID char (4),
Antragsnr char (8),
Antragsdat char (8),
Status char (2),
AendStatus char (8),
Gegenstandschluessel char (4),
Gegenstandlangtext char (254),
InvNummer char (8),
MaxAnzahl char (4),
ProdProb char (5),
Verlaengerung char (1)))
LOCATION ('daueraus.txt'));
iudey
Дата: 26.02.2007 01:29:17
Текстовый файл получаю из SAP системе. Раньше импорт данных происходил с помощью функций Accessa ( БД Ассеss ). Теперь Access нужно перевести на Oracle.
Дано, что 1 строка в таблице = 326 знаков. Смотрел код функций от Accessa, там тоже все поля расписаны и длина строки =326. Строчки расположены друг за другом, т.е. новая строчка в файле не начинается с новой строки.
При попытке Selecta с внешней таблице выдаётся ошибка ORA-29400 DATA Cartridge Error.
Анализ файла показал, что строчка не всегда имеет длину 326 бывает 325 и 324. Понятно, что здесь ошибка. Но, вот какая странная вещь
1) Коллеги-немцы сказали, что в Accesse всё работает
2) Содержимое файла я скопировал в Toad-эдитор. И Toad отформатировал содержимое файла
правильно. Т.Е. Он содержимое файла точно поделил на строчки. Пример
В файле:
Иванов 1975Москва Ирисметов1967Ташкент

В Тоаd-Editor:
Иванов 1975Москва
Ирисметов1967Ташкент

Напомню, что длинна одной строчке в файле колеблется от 324 до 326 знаков, а по заданию должно быть 326. Из за этого и ошибка, но ОТКУДА TOAD-Editor РАЗПОЗНАЁТ, ГДЕ ЗАКАНЧИВАЕТСЯ
СТРОКА И ВЫДАЁТ ВСЕ ПОДЕЛЁННОЕ НА СТОЛБЦЫ??????????????????????????????????????

Evgeniy
Germany
SY
Дата: 26.02.2007 03:51:59
iudey
Напомню, что длинна одной строчке в файле колеблется от 324 до 326 знаков, а по заданию должно быть 326. Из за этого и ошибка, но ОТКУДА TOAD-Editor РАЗПОЗНАЁТ, ГДЕ ЗАКАНЧИВАЕТСЯ
СТРОКА И ВЫДАЁТ ВСЕ ПОДЕЛЁННОЕ НА СТОЛБЦЫ??????????????????????????????????????

Evgeniy
Germany


Assuming 325 bytes means field Verlaengerung is null and 324 bytes means Verlaengerung is null and ProdProb is 4 bytes long, do not use FIXED 326. Use DELIMITED BY NEWLINE and MISSING FIELD VALUES ARE NULL:

CREATE TABLE dagimp_ext (PersNr char(10),
Antrart char(2),
Vorgart char(2),
Fiktion char (2),
Inventar char (2),
GegTyp char (2),
GegID char (4),
Antragsnr char (8),
Antragsdat char (8),
Status char (2),
AendStatus char (8),
Gegenstandschluessel char (4),
Gegenstandlangtext char (254),
InvNummer char (8),
MaxAnzahl char (4),
ProdProb char (5),
Verlaengerung char (1)
)
ORGANIZATION EXTERNAL (TYPE ORACLE_LOADER DEFAULT DIRECTORY ext_dir
ACCESS PARAMETERS (RECORDS DELIMITED BY NEWLINE FIELDS MISSING FIELD VALUES ARE NULL 
(PersNr char(10),
Antrart char(2),
Vorgart char(2),
Fiktion char (2),
Inventar char (2),
GegTyp char (2),
GegID char (4),
Antragsnr char (8),
Antragsdat char (8),
Status char (2),
AendStatus char (8),
Gegenstandschluessel char (4),
Gegenstandlangtext char (254),
InvNummer char (8),
MaxAnzahl char (4),
ProdProb char (5),
Verlaengerung char (1)))
LOCATION ('daueraus.txt'));

SY.
iudey
Дата: 26.02.2007 11:40:17
Spasibo, poprobuu. Est eshe mnenia?????????????????????ßß
Alexus12
Дата: 26.02.2007 13:11:11
автор
но ОТКУДА TOAD-Editor РАЗПОЗНАЁТ, ГДЕ ЗАКАНЧИВАЕТСЯ
СТРОКА И ВЫДАЁТ ВСЕ ПОДЕЛЁННОЕ НА СТОЛБЦЫ??????????????????????????????????????


не откуда-то ;)
у вас ЕСТЬ разделитель, состоящий, видимо, не из полного сочетания CR+LF, а из одного из этих символов
смотрите свой файл на предмет ASCII-кодов 13 и 10 соотв-но
iudey
Дата: 26.02.2007 13:43:03
не откуда-то ;)
у вас ЕСТЬ разделитель, состоящий, видимо, не из полного сочетания CR+LF, а из одного из этих символов
смотрите свой файл на предмет ASCII-кодов 13 и 10 соотв-но[/quot]


A kak eto s PL/SQl kodom swiasat???
iudey
Дата: 26.02.2007 14:33:02
Esli ja wot eto w kod napishu:

RECORDS DELIMITED BY '\r\n'

budet rabotat?
iudey
Дата: 26.02.2007 21:11:16
Посоветуйте, что делать?
iudey
Дата: 26.02.2007 21:41:37
SY
iudey
Напомню, что длинна одной строчке в файле колеблется от 324 до 326 знаков, а по заданию должно быть 326. Из за этого и ошибка, но ОТКУДА TOAD-Editor РАЗПОЗНАЁТ, ГДЕ ЗАКАНЧИВАЕТСЯ
СТРОКА И ВЫДАЁТ ВСЕ ПОДЕЛЁННОЕ НА СТОЛБЦЫ??????????????????????????????????????

Evgeniy
Germany


Assuming 325 bytes means field Verlaengerung is null and 324 bytes means Verlaengerung is null and ProdProb is 4 bytes long, do not use FIXED 326. Use DELIMITED BY NEWLINE and MISSING FIELD VALUES ARE NULL:

CREATE TABLE dagimp_ext (PersNr char(10),
Antrart char(2),
Vorgart char(2),
Fiktion char (2),
Inventar char (2),
GegTyp char (2),
GegID char (4),
Antragsnr char (8),
Antragsdat char (8),
Status char (2),
AendStatus char (8),
Gegenstandschluessel char (4),
Gegenstandlangtext char (254),
InvNummer char (8),
MaxAnzahl char (4),
ProdProb char (5),
Verlaengerung char (1)
)
ORGANIZATION EXTERNAL (TYPE ORACLE_LOADER DEFAULT DIRECTORY ext_dir
ACCESS PARAMETERS (RECORDS DELIMITED BY NEWLINE FIELDS MISSING FIELD VALUES ARE NULL 
(PersNr char(10),
Antrart char(2),
Vorgart char(2),
Fiktion char (2),
Inventar char (2),
GegTyp char (2),
GegID char (4),
Antragsnr char (8),
Antragsdat char (8),
Status char (2),
AendStatus char (8),
Gegenstandschluessel char (4),
Gegenstandlangtext char (254),
InvNummer char (8),
MaxAnzahl char (4),
ProdProb char (5),
Verlaengerung char (1)))
LOCATION ('daueraus.txt'));

SY.


Только первую строчку читает и всё. Этот метод неподходит.
Какие предложения будут?
SY
Дата: 26.02.2007 23:23:20
iudey
Только первую строчку читает и всё. Этот метод неподходит.
Какие предложения будут?


Means lines are delimited not by NEWLINE:

SQL> CREATE TABLE dagimp_ext (PersNr char(10),
  2  Antrart char(2),
  3  Vorgart char(2),
  4  Fiktion char (2),
  5  Inventar char (2),
  6  GegTyp char (2),
  7  GegID char (4),
  8  Antragsnr char (8),
  9  Antragsdat char (8),
 10  Status char (2),
 11  AendStatus char (8),
 12  Gegenstandschluessel char (4),
 13  Gegenstandlangtext char (254),
 14  InvNummer char (8),
 15  MaxAnzahl char (4),
 16  ProdProb char (5),
 17  Verlaengerung char (1)
 18  )
 19  ORGANIZATION EXTERNAL (TYPE ORACLE_LOADER DEFAULT DIRECTORY temp
 20  ACCESS PARAMETERS (RECORDS DELIMITED BY NEWLINE FIELDS MISSING FIELD VALUES ARE NULL 
 21  (PersNr char(10),
 22  Antrart char(2),
 23  Vorgart char(2),
 24  Fiktion char (2),
 25  Inventar char (2),
 26  GegTyp char (2),
 27  GegID char (4),
 28  Antragsnr char (8),
 29  Antragsdat char (8),
 30  Status char (2),
 31  AendStatus char (8),
 32  Gegenstandschluessel char (4),
 33  Gegenstandlangtext char (254),
 34  InvNummer char (8),
 35  MaxAnzahl char (4),
 36  ProdProb char (5),
 37  Verlaengerung char (1)))
 38  LOCATION ('daueraus.txt'));

Table created.

SQL> SELECT * FROM dagimp_ext;

PERSNR     AN VO FI IN GE GEGI ANTRAGSN ANTRAGSD ST AENDSTAT GEGE
---------- -- -- -- -- -- ---- -------- -------- -- -------- ----
GEGENSTANDLANGTEXT
--------------------------------------------------------------------------------
INVNUMME MAXA PRODP V
-------- ---- ----- -
Line1



Line2



PERSNR     AN VO FI IN GE GEGI ANTRAGSN ANTRAGSD ST AENDSTAT GEGE
---------- -- -- -- -- -- ---- -------- -------- -- -------- ----
GEGENSTANDLANGTEXT
--------------------------------------------------------------------------------
INVNUMME MAXA PRODP V
-------- ---- ----- -

Line3




SQL> 

If I change file daueraus.txt from

daueraus.txt
LINE1
LINE2
LINE3


to

daueraus.txt
LINE1<tab>LINE2<tab>LINE3


I get:

SQL> SELECT * FROM dagimp_ext;

PERSNR     AN VO FI IN GE GEGI ANTRAGSN ANTRAGSD ST AENDSTAT GEGE
---------- -- -- -- -- -- ---- -------- -------- -- -------- ----
GEGENSTANDLANGTEXT
--------------------------------------------------------------------------------
INVNUMME MAXA PRODP V
-------- ---- ----- -
Line1   Line 2  Li ne 3

Now when I change DELIMITED BY NEWLINE to DELIMITED BY '\t' I get three lines again:

SQL> DROP TABLE dagimp_ext;

Table dropped.

SQL> CREATE TABLE dagimp_ext (PersNr char(10),
  2  Antrart char(2),
  3  Vorgart char(2),
  4  Fiktion char (2),
  5  Inventar char (2),
  6  GegTyp char (2),
  7  GegID char (4),
  8  Antragsnr char (8),
  9  Antragsdat char (8),
 10  Status char (2),
 11  AendStatus char (8),
 12  Gegenstandschluessel char (4),
 13  Gegenstandlangtext char (254),
 14  InvNummer char (8),
 15  MaxAnzahl char (4),
 16  ProdProb char (5),
 17  Verlaengerung char (1)
 18  )
 19  ORGANIZATION EXTERNAL (TYPE ORACLE_LOADER DEFAULT DIRECTORY temp
 20  ACCESS PARAMETERS (RECORDS DELIMITED BY '\t' FIELDS MISSING FIELD VALUES ARE NULL 
 21  (PersNr char(10),
 22  Antrart char(2),
 23  Vorgart char(2),
 24  Fiktion char (2),
 25  Inventar char (2),
 26  GegTyp char (2),
 27  GegID char (4),
 28  Antragsnr char (8),
 29  Antragsdat char (8),
 30  Status char (2),
 31  AendStatus char (8),
 32  Gegenstandschluessel char (4),
 33  Gegenstandlangtext char (254),
 34  InvNummer char (8),
 35  MaxAnzahl char (4),
 36  ProdProb char (5),
 37  Verlaengerung char (1)))
 38  LOCATION ('daueraus.txt'));

Table created.

SQL> SELECT * FROM dagimp_ext;

PERSNR     AN VO FI IN GE GEGI ANTRAGSN ANTRAGSD ST AENDSTAT GEGE
---------- -- -- -- -- -- ---- -------- -------- -- -------- ----
GEGENSTANDLANGTEXT
--------------------------------------------------------------------------------
INVNUMME MAXA PRODP V
-------- ---- ----- -
Line1



Line2



PERSNR     AN VO FI IN GE GEGI ANTRAGSN ANTRAGSD ST AENDSTAT GEGE
---------- -- -- -- -- -- ---- -------- -------- -- -------- ----
GEGENSTANDLANGTEXT
--------------------------------------------------------------------------------
INVNUMME MAXA PRODP V
-------- ---- ----- -

Line3




SQL> 

So, as I said, most likely your source file records are delimited by something else than newline.

SY.