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/04/2006, 10h51   #1
Candidat au titre de Membre du Club
 
Inscription : janvier 2005
Messages : 74
Détails du profil
Informations forums :
Inscription : janvier 2005
Messages : 74
Points : 13
Points : 13
Par défaut Sql Loader ET les variables externes

Bonjour,

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
 
# more MON_FICHIER_DATA.ctl
 
LOAD DATA
APPEND
INTO MA_TABLE
(
  NOM         POSITION(20:40)       CHAR,
  PRENOM    POSITION(60:80)       CHAR,
  ID                                          INTEGER EXTERNAL,
)
 
// Ou la colonne "ID" tient ça valeur a partir d'une variable externe dynamic.
...
 
ET dans mon scipt shell :
# more load.sh
...
sqlldr DATA=MON_FICHIER_DATA CONTROL=MON_FICHIER_DATA.ctl  
...
Ma question :

Comment peut on faire passer une valeur (ex : a partir du shell) à la colonne "ID" dans sql loader ?

Merci
devdev2003 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/04/2006, 10h59   #2
Membre éclairé
 
Inscription : septembre 2003
Messages : 432
Détails du profil
Informations forums :
Inscription : septembre 2003
Messages : 432
Points : 326
Points : 326
Non INTEGER EXTERNAL ca veux dire que c'est un nombre "externe"!
Et que tu laisses sql loader convertir le champs de ton fichier en format connu pas ORACLE (type du champs de TABLE.ID dans ton exemple).

cf http://www.ift.ulaval.ca/~agamache/p.../SQLloader.pdf page 5

Tiens voici un doc bien faite http://www.orafaq.com/faqloadr.htm
sygale est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/04/2006, 11h16   #3
Candidat au titre de Membre du Club
 
Inscription : janvier 2005
Messages : 74
Détails du profil
Informations forums :
Inscription : janvier 2005
Messages : 74
Points : 13
Points : 13
Merci pour votre aide,

Mais, je voudrais faire passer une valeur a sql loader, pour qu'elle soit loader dans la colonne "ID" de "MA_TABLE" via le script shell ?
devdev2003 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/04/2006, 11h21   #4
Membre éclairé
 
Inscription : septembre 2003
Messages : 432
Détails du profil
Informations forums :
Inscription : septembre 2003
Messages : 432
Points : 326
Points : 326
Si c'est une constante :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
  LOAD DATA
   INFILE *
   INTO TABLE modified_data
   (  rec_no                      "my_db_sequence.nextval",
      region                      CONSTANT '31',
      time_loaded                 "to_char(SYSDATE, 'HH24:MI')",
      data1        POSITION(1:5)  ":data1/100",
      data2        POSITION(6:15) "upper(:data2)",
      data3        POSITION(16:22)"to_date(:data3, 'YYMMDD')"
   )
   BEGINDATA
   11111AAAAAAAAAA991201
   22222BBBBBBBBBB990112
sygale est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/04/2006, 11h21   #5
Membre éclairé
 
Inscription : septembre 2003
Messages : 432
Détails du profil
Informations forums :
Inscription : septembre 2003
Messages : 432
Points : 326
Points : 326
Citation:
Envoyé par sygale
Si c'est une constante :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
  LOAD DATA
   INFILE *
   INTO TABLE modified_data
   (  rec_no                      "my_db_sequence.nextval",
      region                      CONSTANT '31',
      time_loaded                 "to_char(SYSDATE, 'HH24:MI')",
      data1        POSITION(1:5)  ":data1/100",
      data2        POSITION(6:15) "upper(:data2)",
      data3        POSITION(16:22)"to_date(:data3, 'YYMMDD')"
   )
   BEGINDATA
   11111AAAAAAAAAA991201
   22222BBBBBBBBBB990112
Quelle genre de valeur veux tu faire passer ?
sygale est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/04/2006, 11h31   #6
Candidat au titre de Membre du Club
 
Inscription : janvier 2005
Messages : 74
Détails du profil
Informations forums :
Inscription : janvier 2005
Messages : 74
Points : 13
Points : 13
Citation:
sygale a écrit :

Quelle genre de valeur veux tu faire passer ?
une valeur dynamic (change a chaque execution du shell)
devdev2003 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/04/2006, 11h58   #7
Membre éclairé
 
Inscription : septembre 2003
Messages : 432
Détails du profil
Informations forums :
Inscription : septembre 2003
Messages : 432
Points : 326
Points : 326
Tente un truc genre
Appel le shell
Code :
1
2
 
/folder/my_shell.sh 123
le shell
Code :
1
2
 
sqlldr DATA=MON_FICHIER_DATA CONTROL=MON_FICHIER_DATA.ctl $1 (ici 123)
le control.ctl
Code :
1
2
3
4
5
6
7
8
9
10
11
12
 
# more MON_FICHIER_DATA.ctl
DEFINE W_ID = &1;
LOAD DATA
APPEND
INTO MA_TABLE
(
  NOM         POSITION(20:40)       CHAR,
  PRENOM    POSITION(60:80)       CHAR,
  ID                             CONSTANT &W_ID ,
  region                      
)
Mais je suis pas sur et j'ai rien sous la main pour tester
sygale est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/04/2006, 12h21   #8
Candidat au titre de Membre du Club
 
Inscription : janvier 2005
Messages : 74
Détails du profil
Informations forums :
Inscription : janvier 2005
Messages : 74
Points : 13
Points : 13
Erreur :

Code :
1
2
3
4
5
 
SQL*Loader-350: Syntax error at line 1.
Expecting keyword LOAD, found "DEFINE".
DEFINE W_ID = &1;
^
devdev2003 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/04/2006, 13h31   #9
Membre éclairé
 
Inscription : septembre 2003
Messages : 432
Détails du profil
Informations forums :
Inscription : septembre 2003
Messages : 432
Points : 326
Points : 326
essaie sans le define juste avec
Mais je serai surpris
sygale est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/04/2006, 14h14   #10
Candidat au titre de Membre du Club
 
Inscription : janvier 2005
Messages : 74
Détails du profil
Informations forums :
Inscription : janvier 2005
Messages : 74
Points : 13
Points : 13
toujours une erreur,

Est ce que c'est fesable ?

si ce n'es pas le cas, je crois qu'il faut changer le fichier contrôle a chaque changement.
devdev2003 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/04/2006, 14h20   #11
Membre éclairé
 
Inscription : septembre 2003
Messages : 432
Détails du profil
Informations forums :
Inscription : septembre 2003
Messages : 432
Points : 326
Points : 326
Citation:
Envoyé par devdev2003
toujours une erreur,

Est ce que c'est fesable ?

si ce n'es pas le cas, je crois qu'il faut changer le fichier contrôle a chaque changement.
Je pense que les tests ci dessus le prouve malheureusement si non envoi un mp à l'auteur de http://jaouad.developpez.com/sqlldr/ il aura peut être une idée
sygale est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/04/2006, 14h30   #12
Candidat au titre de Membre du Club
 
Inscription : janvier 2005
Messages : 74
Détails du profil
Informations forums :
Inscription : janvier 2005
Messages : 74
Points : 13
Points : 13
Citation:
Je pense que les tests ci dessus le prouve malheureusement si non envoi un mp à l'auteur de http://jaouad.developpez.com/sqlldr/ il aura peut être une idée
c'est une bonne idée.

Merci
devdev2003 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/04/2006, 23h31   #13
Rédacteur/Modérateur
 
Inscription : janvier 2005
Messages : 2 320
Détails du profil
Informations forums :
Inscription : janvier 2005
Messages : 2 320
Points : 2 368
Points : 2 368
Bonsoir ,
si tu souhaites ajouter le user de la personne qui a fait le chargement n il te suffit de consulter le doc :http://jaouad.developpez.com/sqlldr/#LV-H

SI c'est une autre valeur, il faut que nous dises ce que tu souhaites charger dans cette requête.

Cela va être quand même difficile, c'est le probléme de communication d'un outil Oracle et de l'OS.

Si on arrive à contourner le probléme sous Sql*Plus, c'est un peu plus difficile sous Sql*Loader ( voila pourquoi il nous faut bcp plus de détail )
Jaouad est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 10h39.


 
 
 
 
Partenaires

Hébergement Web