SQL Loader : maj de données existantes avec APPEND
:salut: tout le monde,
je découvre SQL Loader et je dois avouer que c'est super pratique et super performant :ccool:
cependant, je suis confronté à un cas qui sera rare mais qui me pourrit bien la vie :calim2:
Voilà :
avec sqlldr, je charge un fichier dans une table spécifique en mode APPEND afin d'ajouter de nouvelles données sans les supprimer.
Il peut arriver parfois que certaines données existantes doivent être mises à jour.
Alors, j'ai fait le test suivant :
charger ma table avec des données qui n'existent pas -> ok
recharger ma table avec les mêmes données -> ko.
j'ai l'erreur suivante :
Citation:
ORA-39776: fatal Direct Path API error loading table SCHEMA.MATABLE
ORA-26027: unique index SCHEMA.INDEXPK partition SYS_SUBP61 initially in unusable state
SQL*Loader-2026: the load was aborted because SQL Loader cannot continue.
Alors, d'après ce que je comprends, cela veut dire qu'il ne peut pas insérer la donnée à cause de ma contrainte.. Normal
Moi, ce que je souhaiterais faire c'est :
- soit que la donnée se mette à jour au moment du loader
- soit qu'il me génère un fichier bad que je puisse traiter après
Hors, actuellement, il me crache l'erreur et il s'arrête sans me générer le fichier bad. :cry:
J'aimerais savoir si que je veux faire est possible ?
Merci de votre aide
PS : voici mon script qui lance le loader :
Code:
1 2 3 4 5 6
|
rm bad.txt
rm log.txt
rm discard.txt
rm sqlldr.txt
sqlldr login/pwd control=control.txt log=log.txt bad=bad.txt discard=discard.txt direct=y errors=2000000000> sqlldr.txt |
et mon fichier de control :
Code:
1 2 3 4 5 6 7 8 9 10
|
LOAD DATA INFILE 'fic.dat'
APPEND
INTO TABLE MATABLE
TRAILING NULLCOLS
(
ID POSITION (1:10),
QUANTITE POSITION (11:19) CHAR(9),
CODE POSITION (20:40) CHAR "SUBSTR(:CODE ,1,3) || SUBSTR(:CODE ,4,1) || SUBSTR(:CODE ,5,10) || SUBSTR(:CODE ,21,1)"
) |