Précédent   Forum des professionnels en informatique > Bases de données > Oracle > Outils > SQL*Loader
SQL*Loader Forum d'entraide sur Oracle SQL*Loader
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 20/06/2007, 11h42   #1
Invité de passage
 
Inscription : juin 2007
Messages : 4
Détails du profil
Informations forums :
Inscription : juin 2007
Messages : 4
Points : 1
Points : 1
Par défaut SQL Loader : erreur de chargement de données

Bonjour,
J'essaie de charger des données dans une table et tous mes enregistrements sont rejetés avec le même message.

Record 33: Rejected - Error on table SER_SERVICE, column ETB_ID.
Column not found before end of logical record (use TRAILING NULLCOLS)
Je comprend ce message mais je n'arrive pas à trouver ce qui ne va pas dans mes datas
Voiçi mon fichier de contrôle
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
LOAD DATA
INFILE 'services_bjn.txt'
INSERT INTO TABLE SER_SERVICE
FIELDS terminated BY "	"
(SER_ID "SER_SEQ.nextval",
    SER_LIB,
    SER_CD,
    ETB_ID,
    SER_ON CONSTANT 'O'
)
SER_ID est une séquence et je souhaite forcer à 'O' la colonne SER_ON
Voiçi la TABLE SER_SERVICE
SER_ID Number
SER_LIB Varchar2
SER_CD Number
SER_ON Char
ETB-ID Number
Voiçi un extrait de mon fichier de données
Citation:
CARDIOLOGIE 03 00005
HEPATOLOGIE 04 00005
GASTRO ENTEROLD 05 00005
MEDECINE INTERN 06 00005
PNEUMO-PHTISIOL 07 00005
CHIRURGIE GENER 08 00005
J'utilise pour la première fois ce loader
Merci pour votre aide
Jef
Jefdebruges est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/06/2007, 12h55   #2
Membre habitué
 
Inscription : juin 2003
Messages : 107
Détails du profil
Informations forums :
Inscription : juin 2003
Messages : 107
Points : 101
Points : 101
1-Pour forcer la colonne SER_ON à 'O', tu peux utiliser DEFAULT lors de la création de la table ou faire ALTER table....

Ou même faire une UPDATE de la table à la fin de chargement
Update Table T
Set SER_ON='O'.

2-Tu peux aussi consulter l'article suivant:
Sql*Loader : Comment effectuer des chargements de données sous Oracle
http://jaouad.developpez.com/sqlldr/
lsaid est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/06/2007, 12h59   #3
Membre habitué
 
Inscription : juin 2003
Messages : 107
Détails du profil
Informations forums :
Inscription : juin 2003
Messages : 107
Points : 101
Points : 101
Voici un exemple d'utilisation de Sql*Loader :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
 
LOAD DATA INFILE 'c:\2007_2.txt'
 INTO TABLE TEST2007
 TRUNCATE
 FIELDS
  TERMINATED BY ';'
TRAILING nullcols
(
NUMERO FILLER,
VAR1  CHAR "decode(:VAR1, '#EMPTY', null, :VAR1)",
VAR2 CHAR "decode(:VAR2, '#EMPTY', null, :VAR2)",
VAR3 CHAR "decode(:VAR3, '#EMPTY', null, :VAR3)",
VAR4 CHAR "decode(:VAR4, '#EMPTY', null, :VAR4)",
)
lsaid est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/06/2007, 16h00   #4
Invité de passage
 
Inscription : juin 2007
Messages : 4
Détails du profil
Informations forums :
Inscription : juin 2007
Messages : 4
Points : 1
Points : 1
Merci Isaid
En fait mon problème est que le loader ne trouve pas la colonne etb_id dans mon fichier de données qui se compose poutant bien de SER_LIB SER_CD ETB_ID et je ne comprend pas pourquoi ?
Jef
Jefdebruges est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/06/2007, 17h01   #5
Invité de passage
 
Inscription : juin 2007
Messages : 4
Détails du profil
Informations forums :
Inscription : juin 2007
Messages : 4
Points : 1
Points : 1
J'ai trouvé une première partie de mon problème. La colonne SER_ID de ma table SER_SERVICE est gérée par une séquence mais cette séquence n'est pas gérée par un trigger lors de l'insertion de données. le loader n'arrivait pas à faire correspondre les champs du fichier de controle à ceux du fichier de données.
J'ai créé un trigger permettant à l'insertion de gérer la séquence.
Il me reste une question à résoudre:
Comment réinitialiser la séquence à 1 après avoir deleter les données de ma table SER_SERVICE (last value reste à la dernière valeur).
Merci si quelqu'un possède la réponse.
Jef
Jefdebruges est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/06/2007, 18h06   #6
Membre habitué
 
Inscription : juin 2003
Messages : 107
Détails du profil
Informations forums :
Inscription : juin 2003
Messages : 107
Points : 101
Points : 101
Je pense la seule façon d’initialiser la valeur de last_value à 1, c'est de dropper la séquence et la recréer à nouveau.

Code :
1
2
 
CREATE SEQUENCE ma_sequence START WITH 1 INCREMENT BY 1 .....;
lsaid est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/06/2007, 11h23   #7
Invité de passage
 
Inscription : juin 2007
Messages : 4
Détails du profil
Informations forums :
Inscription : juin 2007
Messages : 4
Points : 1
Points : 1
Merci Isaid pour ton aide,
Sans dropper la sequence il est possible de récupérer le currval et d'utiliser l'option cycle
select sequence ma_sequence.currval;
alter sequence ma_sequence maxvalue currval cycle;
delete des données d la table
rechargement par sql loader
alter sequence ma_sequence maxvalue xxxxxxx nocycle;
Jef
Jefdebruges est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 02h58.


 
 
 
 
Partenaires

Hébergement Web