Oracle
 sql >> Datenbank >  >> RDS >> Oracle

Überspringen von Datenfeldern beim Laden von durch Trennzeichen getrennten Daten mit SQLLDR

Definieren Sie die Spalte, die Sie überspringen möchten, als FILLER. Denken Sie daran, dass die Reihenfolge der Spalten in der Steuerdatei normalerweise der Reihenfolge entspricht, in der sie sich in der Datendatei befinden. Wenn der Name mit einer Spalte in der Tabelle übereinstimmt, wird er dorthin verschoben.

...
(
  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
)

Mit anderen Worten, die Reihenfolge der Spalten in der Steuerdatei stimmt mit der Reihenfolge in der Datendatei überein, nicht mit ihrer Reihenfolge in der Tabelle. Das wird nach Namen abgeglichen, nicht nach Reihenfolge.

BEARBEITEN - Ich habe einige Kommentare zur Erklärung hinzugefügt, aber ich glaube, dass sie sich in der eigentlichen Datei nicht an dieser Position befinden können. Unten finden Sie ein vollständiges Beispiel:

Tabelle erstellen:

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

Die Steuerdatei 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

Führen Sie es aus:

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

Wählen Sie aus der Tabelle:

Hoffentlich hilft das.