Avatar billede margesimpson Nybegynder
13. april 2005 - 18:46 Der er 1 løsning

SQL Loader WHEN og kommasepareret fil med carriage return

Hej Eksperter,

Jeg har en kommasepareret .csv fil med følgende data:

NUMBER,"TYPE","NAME","PHONENO"
17114608,"CONF","N/A","4745090675"
17114609,"CONF","N/A","4745090675"
17114610,"ABC","N/A","4745090675"
17114611,"ABC","INC","4745016023"
17114612,"ABC","N/A","4745090675"

Jeg ønsker at overføre data til to tabeller, TABEL_1 og TABEL_2. Begge tabeller har følgende kolonner: NUMBER, TYPE, NAME, PHONE_NUMBER. TYPE skal være afgørende for hvilken tabel data indsættes i. CONF skal i TABEL_1 og ABC i TABEL_2.

Min control fil ser således ud:

LOAD DATA
APPEND
INTO TABLE  TABEL_1
WHEN (TYPE = 'CONF')
FIELDS TERMINATED BY "," OPTIONALLY ENCLOSED BY '"'
(
NUMBER,
TYPE,
NAME,
PHONE_NUMBER
)
INTO TABLE  TABEL_2
WHEN (TYPE = 'ABC')
FIELDS TERMINATED BY "," OPTIONALLY ENCLOSED BY '"'
(
NUMBER,
TYPE,
NAME,
PHONE_NUMBER
)

Data af typen CONF bliver fint indsat i TABEL_1, men de tre ABC-rækker bliver ignoreret.

I logfilen får jeg bl.a. følgende besked:

Tabel TABEL_1:
  3 Rækker indlæst uden fejl.
  0 Rækker ikke indlæst pga. datafejl.
  3 Rækker er ikke indlæst, da der var fejl i alle WHEN-klausuler.
  0 Rækker er ikke indlæst, da alle felter var NULL.


Tabel TABEL_2:
  0 Rækker indlæst uden fejl.
  0 Rækker ikke indlæst pga. datafejl.
  6 Rækker er ikke indlæst, da der var fejl i alle WHEN-klausuler.
  0 Rækker er ikke indlæst, da alle felter var NULL.


Hvad gør jeg mon galt?

Mange hilsner
Avatar billede margesimpson Nybegynder
14. april 2005 - 18:58 #1
Jeg har nu selv fundet løsningen på:

http://www.stanford.edu/dept/itss/docs/oracle/9i/server.920/a96652/ch06.htm

When a subsequent INTO TABLE clause begins, the position is not set to the beginning of the logical record automatically.
A logical record might contain data for one of two tables, but not both. In this case, you would reset POSITION. Instead of omitting the position specification or using POSITION(*+n) for the first field in the INTO TABLE clause, use POSITION(1) or POSITION(n).

Control filen ser nu således ud:

LOAD DATA
APPEND
INTO TABLE  TABEL_1
WHEN (TYPE = 'CONF')
FIELDS TERMINATED BY "," OPTIONALLY ENCLOSED BY '"'
(
NUMBER,
TYPE,
NAME,
PHONE_NUMBER
)
INTO TABLE  TABEL_2
WHEN (TYPE = 'ABC')
FIELDS TERMINATED BY "," OPTIONALLY ENCLOSED BY '"'
(
NUMBER POSITION(1),
TYPE,
NAME,
PHONE_NUMBER
)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Computerworld tilbyder specialiserede kurser i database-management

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester