IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
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 Oracle Discussion :

Sql*Loader et fonctions


Sujet :

SQL Oracle

  1. #1
    Membre confirmé
    Inscrit en
    Octobre 2005
    Messages
    53
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 53
    Par défaut Sql*Loader et fonctions
    Bonjour,

    Je souhaiterais savoir si, lors du chargement d'un fichier dans une table via un loader, une colonne de cette table peut être remplie avec le résultat d'une fonction. :

    Je précise :
    J'ai un fichier de données FIC que je souhaite charger dans la table TOTO. Mais, lors de la création des enregistrements dans TOTO, je voudrais que la colonne COL1 de TOTO prenne la valeur de la session Oracle, soit le résultat de USERENV('SESSIONID').
    J'ai essayé de mettre dans mon fichier loader :
    COL1 USERENV('SESSIONID'),
    mais je me fais jeter à l'exécution...

    Y a-t-il un moyen de le faire, une manière de l'écrire dans le loader, etc... ?

    Merci par avance !

  2. #2
    Rédacteur

    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    2 320
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 320
    Par défaut
    Bonjour ,
    Ce que tu cherche c'est de stocker le user qui effectue le Sql*Loader .

    FIELDS TERMINATED BY ';'
    (id "USER",
    ...

    Bon courage
    jaouad

  3. #3
    Membre confirmé
    Inscrit en
    Octobre 2005
    Messages
    53
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 53
    Par défaut
    Ce que tu cherche c'est de stocker le user qui effectue le Sql*Loader
    Non, c'est vraiment le numéro de session que je cherche à insérer.
    En fait, nous avons un traitement, effectuant un chargement de fichier via un loader, qui pourra bientôt être lancé simultanément sur la même base, et avec le même user.
    Donc, pour différencier les lignes insérées, afin que la suite du traitement ne s'occupe que des lignes qu'il a inséré, j'ai besoin du numéro de session car le user sera le même.
    Je sais, c'est compliqué, mais on s'adapte à la situation...

  4. #4
    Membre confirmé
    Inscrit en
    Octobre 2005
    Messages
    53
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 53
    Par défaut
    Ah, j'ai oublié de préciser la version d'Oracle utilisée : v8.1.5 !

  5. #5
    Rédacteur

    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    2 320
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 320
    Par défaut
    je ne sais pas si c'est possible mais pourquoi pas insérer cela via un trigger :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    CREATE OR REPLACE TRIGGER id_dvp 
    before insert on dvp  
    for each row 
    begin 
    :NEW.a :=USERENV('SESSIONID') ; 
    end; 
    /

  6. #6
    Membre confirmé
    Inscrit en
    Octobre 2005
    Messages
    53
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 53
    Par défaut
    Citation Envoyé par Jaouad
    je ne sais pas si c'est possible mais pourquoi pas insérer cela via un trigger :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    CREATE OR REPLACE TRIGGER id_dvp 
    before insert on dvp  
    for each row 
    begin 
    :NEW.a :=USERENV('SESSIONID') ; 
    end; 
    /
    J'avais bien pensé à cette solution, mais j'espérais pouvoir le faire via le loader....
    Mais si c'est pas possible.... C'est pas possible !

    Merci en tout cas pour ton aide !

  7. #7
    Rédacteur

    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    2 320
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 320
    Par défaut
    Je ne sais pas si c'est possible ou pas.
    Qu'a donné une recherche sur Métalink ?

    Jaouad

  8. #8
    Membre Expert

    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Janvier 2004
    Messages
    2 862
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Chef de projet en SSII
    Secteur : Conseil

    Informations forums :
    Inscription : Janvier 2004
    Messages : 2 862
    Par défaut
    Comment as-tu tapé ta fonction ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    LOAD DATA
    ...
    (col1 "USERENV('SESSIONID')",
    ...
    Cela ne fonctionne pas ?

    NB: j'ai jamais essayé cette fonction, mais j'en utilise d'autres comme la fonction decode et cela passe sans problème.

  9. #9
    Membre confirmé
    Inscrit en
    Octobre 2005
    Messages
    53
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 53
    Par défaut
    Citation Envoyé par plaineR
    Comment as-tu tapé ta fonction ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    LOAD DATA
    ...
    (col1 "USERENV('SESSIONID')",
    ...
    Cela ne fonctionne pas ?

    NB: j'ai jamais essayé cette fonction, mais j'en utilise d'autres comme la fonction decode et cela passe sans problème.
    Effectivement, ça marche comme ça !
    En fait, je n'avais pas mis les " "...

    Par contre, j'ai un autre soucis...
    Voici mon loader test :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    LOAD DATA
    	APPEND
    	INTO TABLE tata
    		WHEN (1:10) = 'DEPECHE : '
    		FIELDS TERMINATED BY '@' OPTIONALLY ENCLOSED BY '"'
    			(IDE_TATA       POSITION(11),
    			COMMENTAIRE    CHAR,
    			SESSION_ID     "USERENV('SESSIONID')",
    			DAT_CRE          sysdate,
    			UTI_CRE          CONSTANT "U700_032B",
    			DAT_MAJ          sysdate,
    			UTI_MAJ          CONSTANT "U700_032B",
    			TERMINAL         CONSTANT "@new@")
    et mon fichier de données test :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    DEPECHE : "1"@"TEST USERENV"
    Il me met l'erreur suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Enregistrement 1 : Rejeté - Erreur sur table TATA, colonne SESSION_ID.
    Colonne absente avant fin d'enregis. logique (utiliser TRAILING NULLCOLS)
    Par contre, ça fonctionne correctement si je rajoute une colonne dans le fichier de données :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    DEPECHE : "1"@"TEST USERENV"@""
    Normal ????

  10. #10
    Membre éclairé
    Inscrit en
    Novembre 2002
    Messages
    549
    Détails du profil
    Informations forums :
    Inscription : Novembre 2002
    Messages : 549
    Par défaut
    essaie ceci :

    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
     
    LOAD DATA 
       APPEND 
       INTO TABLE tata 
          WHEN (1:10) = 'DEPECHE : ' 
          FIELDS TERMINATED BY '@' OPTIONALLY ENCLOSED BY '"' 
    TRAILING NULLCOLS
             (IDE_TATA       POSITION(11), 
             COMMENTAIRE    CHAR, 
             SESSION_ID     "USERENV('SESSIONID')", 
             DAT_CRE          sysdate, 
             UTI_CRE          CONSTANT "U700_032B", 
             DAT_MAJ          sysdate, 
             UTI_MAJ          CONSTANT "U700_032B", 
             TERMINAL         CONSTANT "@new@")

  11. #11
    Membre confirmé
    Inscrit en
    Octobre 2005
    Messages
    53
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 53
    Par défaut
    Effectivement, il n'y a plus d'erreur avec ça.

    Merci à tous.

  12. #12
    Expert éminent
    Avatar de orafrance
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    15 967
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15 967
    Par défaut
    un article arrive dés demain à ce sujet

  13. #13
    Membre confirmé
    Inscrit en
    Octobre 2005
    Messages
    53
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 53
    Par défaut
    Je n'ai qu'une chose à dire : vivement demain !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. équivalent SQL*Loader pour FB / IB
    Par djeant dans le forum Outils
    Réponses: 9
    Dernier message: 10/01/2005, 21h26
  2. Chargement de fichier par SQL LOADER
    Par davy.g dans le forum SQL*Loader
    Réponses: 17
    Dernier message: 15/11/2004, 13h08
  3. SQL LOADER
    Par velo83 dans le forum SQL*Loader
    Réponses: 2
    Dernier message: 25/10/2004, 08h24
  4. Réponses: 4
    Dernier message: 10/06/2004, 18h05
  5. erreur sql loader et performance
    Par mobisky dans le forum SQL*Loader
    Réponses: 14
    Dernier message: 20/08/2003, 12h27

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo