Oracle
 sql >> Base de Dados >  >> RDS >> Oracle

Ignorando campos de dados ao carregar dados delimitados usando SQLLDR


Defina a coluna que deseja ignorar como FILLER. Tenha em mente que a ordem das colunas no arquivo de controle geralmente é a ordem em que estão no arquivo de dados. Se o nome corresponder a uma coluna na tabela, é para lá que ele irá.
...
(
  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
)

Em outras palavras, a ordem das colunas no arquivo de controle corresponde à ordem em que estão no arquivo de dados, não à ordem na tabela. Isso é combinado por nome, não por ordem.

EDIT - adicionei alguns comentários para explicação, mas acredito que eles não possam estar nessa posição no arquivo real. Veja abaixo um exemplo completo:

Criar a tabela:
CREATE TABLE T1
(
  F1  VARCHAR2(50 BYTE),
  F2  VARCHAR2(50 BYTE),
  F3  VARCHAR2(50 BYTE)
);

O arquivo de controle, 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

Executá-lo:
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

Selecione na tabela:



Espero que isso ajude.