Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

SQL*Loader Oracle Discussion :

Mon premier sql*loader


Sujet :

SQL*Loader Oracle

  1. #1
    Membre à l'essai
    Mon premier sql*loader
    Bonjour à tous !

    Voilà mon souci : je dois remplir une colonne dans oracle, à l'aide d'un fichier plat (txt ou csv)....
    Après quelques recherches, et surtout après discussion avec les dba, on m'a conseillé d'utiliser sql*loader.
    J'ai pu trouver quelques infos, et commencer à écrire mon fichier controle, mais il me manque quelques éléments :
    Il faudrait que je puisse comparer un champ de ma table avec un de mon fichier, afin de mettre à jour ma colonne que si les 2 champs sont égaux :
    Ma Table (champ1, REF_ID, champ3, champ4, champ5, COD_ID)
    Mon fichier(REF_ID, COD_ID).
    Le champ COD_ID de ma table est celui que je veux remplir (à null pour le moment), le REF_ID de la table et du fichier, qui doivent être identiques.
    Voici mon fichier controle actuellement :
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
     
    LOAD DATA
    INFILE 'extract_cod_ref.txt'
     
    	BADFILE 'cod.bad'
    	DISCARDFILE 'cod.dsc'
     
    APPEND INTO TABLE L_ENT 
    FIELDS terminated by ";" TRAILING NULLCOLS
    WHEN (COD_ID=null)
    (
    CH1,
    REF_ID,
    CH3,
    CH4,
    CH5,
    COD_ID
    )


    Comment puis-je spécifier ma condition ?

    Merci d'avance pour votre aide !

  2. #2
    Membre à l'essai
    euh....personne ne sait, ou je me trompe dans l'utilisation de sql*loader et ce que je souhaite faire n'est pas possible ??

  3. #3
    Expert confirmé
    Il faudrait que je puisse comparer un champ de ma table avec un de mon fichier, afin de mettre à jour ma colonne que si les 2 champs sont égaux
    Utilse une table externe à la place de sqlloader, sinon il faudra passer par une table tampon.

  4. #4
    Membre à l'essai
    effectivement, en continuant mes recherches j'ai vu que sql*loader ne permettait pas des update....
    merci de ta confirmation
    Par contre concernant les tables tampon, j'imagine qu'il faut des droits sur la base ?

  5. #5
    Expert confirmé
    Ben il faut préalablement créer une table pour accueillir les données du fichier, ensuite tu fais l'update.
    Les tables externes permettent de directement faire l'update, c'est à mon sens la méthode à utiliser.

    Evidemment il faut avoir les droits d'update sur la table ou avoir le droit d'exécution sur une procédure qui fera l'update.

    Donne toutes les infos à tes dbas et vois avec eux la méthode qu'ils préfèrent et les grants nécessaires.

  6. #6
    Membre à l'essai
    Re !

    Bon, j'ai finalement changé de philosophie, en fait depuis le début de la semaine je cherchais comment faire cet update, j'ai tourné autour de diverses solutions au fil de mes recherches...écouté des conseils de collègues, avec chacun sa façon de faire...
    bref, j'ai fait un ti script java qui fait bien son boulot (testé en base de dev)... tant pis si ça ne correspond pas aux bonnes pratiques, c'est pour un update qui ne se fera qu'une seule fois !

    Merci quand même pour de ton aide !!