2010-11-05 61 views
4

Je dispose d'un fichier de données qui ressemble à ceci:Oracle SQL Loader divisé les données en différentes tables

1   2   3  4    5   6  
FirstName1 | LastName1 | 4224423 | Address1 | PhoneNumber1 | 1/1/1980 
FirstName2 | LastName2 | 4008933 | Address1 | PhoneNumber1 | 1/1/1980 
FirstName3 | LastName3 | 2344327 | Address1 | PhoneNumber1 | 1/1/1980 
FirstName4 | LastName4 | 5998943 | Address1 | PhoneNumber1 | 1/1/1980 
FirstName5 | LastName5 | 9854531 | Address1 | PhoneNumber1 | 1/1/1980 

Mon DB dispose de 2 tables, une pour PERSONNE et un pour ADRESSE, donc je dois stocker les colonnes 1,2,3 et 6 dans PERSON et la colonne 4 et 5 dans ADRESSE. Tous les exemples fournis dans la documentation de SQL Loader traitent ce cas, mais uniquement pour les colonnes de taille fixe, et mon fichier de données est délimité par des tuyaux (et il n'est pas possible de l'insérer dans deux fichiers de données différents).

Est-ce que quelqu'un sait comment faire cela?

Comme toujours l'aide sera profondément appréciée.

Répondre

3

Une autre option peut être de mettre en place le fichier en tant external table puis exécutez les inserts en sélectionnant les colonnes que vous voulez à partir de la table externe.

+0

+1 solution la plus simple –

+0

Mmm, c'est une idée intéressante – Chepech

+0

Autre option est d'exécuter deux fois le fichier; La première fois, vous ne prenez que ce dont vous avez besoin pour la première table et ignorez le reste avec une instruction FILLER. Vous faites la même chose pour la deuxième table. – Chepech

0

Même si SQLLoader ne supporte pas cela (je ne suis pas sûr), rien ne vous empêche de le pré-traiter avec say awk, puis de le charger. Par exemple:

cat 1.dat | awk -F '|' '{print $1 $2 $3 $6}' > person.dat 
cat 1.dat | awk -F '|' '{print $4 $5}' > address.dat 
1
options(skip=1) 
load data 
infile "csv file path" 
insert into table person 
fields terminated by ',' 
optionally enclosed by '"' 
trialling nullcols(1,2,3,6) 

insert into table address 
fields terminated by ',' 
optionally enclosed by '"' 
trialling nullcols(4,5)