sql >> Databasteknik >  >> RDS >> Oracle

Hoppa över datafält medan avgränsade data laddas med SQLLDR

Definiera kolumnen du vill hoppa över som FILLER. Tänk på att ordningen på kolumnerna i kontrollfilen vanligtvis är den ordning de är i datafilen. Om namnet matchar en kolumn i tabellen, är det dit det kommer att gå.

...
(
  f1 CHAR,  -- 1st field in the file, goes to column named f1 in the table
  X FILLER, -- 2nd field in the file, ignored
  f3 CHAR,  -- 3rd field in the file, goes to column named f3 in the table
  f2 CHAR   -- 4th field in the file, goes to column named f2 in the table
)

Med andra ord, ordningen på kolumnerna i kontrollfilen matchar ordningen de är i datafilen, inte deras ordning i tabellen. Det matchas med namn, inte ordning.

EDIT - Jag lade till några kommentarer för förklaring, men jag tror att de inte kan vara i den positionen i själva filen. Se nedan för ett fullständigt exempel:

Skapa tabell:

CREATE TABLE T1
(
  F1  VARCHAR2(50 BYTE),
  F2  VARCHAR2(50 BYTE),
  F3  VARCHAR2(50 BYTE)
);

Kontrollfilen, example.ctl:

load data 
infile *
truncate
into table t1
fields terminated by '|' trailing nullcols
(
f1 CHAR,
x FILLER,
f3 CHAR,
f2 CHAR
)
BEGINDATA
a|b|c|d
w|x|y|z

Kör det:

C:\temp>sqlldr userid=login/[email protected] control=example.ctl
SQL*Loader: Release 11.2.0.1.0 - Production on Wed Apr 22 11:25:49 2015
Copyright (c) 1982, 2009, Oracle and/or its affiliates.  All rights reserved.
Commit point reached - logical record count 2

Välj från tabellen:

Förhoppningsvis hjälper detta.




  1. Se upp för en tabell nya poster i SQL-databasen

  2. Laravel Eloquent välj alla rader med max create_at

  3. MySQL - BETWEEN kommer inte att välja korrekta resultat

  4. Otydlig matchning av en sträng i SQL