tout le monde,

je découvre SQL Loader et je dois avouer que c'est super pratique et super performant

cependant, je suis confronté à un cas qui sera rare mais qui me pourrit bien la vie

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 :
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.

J'aimerais savoir si que je veux faire est possible ?

Merci de votre aide

PS : voici mon script qui lance le loader :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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 : Sélectionner tout - Visualiser dans une fenêtre à part
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)"
)