Précédent   Forum des professionnels en informatique > Bases de données > Oracle
Oracle Forum Oracle : le serveur, les outils, ... Voir F.A.Q Oracle Tutoriels Oracle
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 28/12/2007, 07h45   #1
Nouveau Membre du Club
 
Inscription : août 2004
Messages : 57
Détails du profil
Informations forums :
Inscription : août 2004
Messages : 57
Points : 36
Points : 36
Envoyer un message via ICQ à jeromek Envoyer un message via AIM à jeromek Envoyer un message via MSN à jeromek Envoyer un message via Yahoo à jeromek
Par défaut Injection de données dans une base à partir d'un fichier

Bonjour à tous et bonnes fêtes!

Voila, je possède des fichiers txt formé comme ceci :

Code :
1
2
3
4
 
1;752-124;52.57;20050101;20051231;lib1                            
2;752-463;94.51;20060101;20061231;lib2                  
3;752-485;36.55;20060101;20061231;lib3
je voudrais injecter ces données dans une table et je me demande quelle serait la méthode la plus simple et la plus rapide.

DB : 10G2

PS: je ne peux pas utiliser l'interface web enterprise manager (problème de ressources lorsque celui-ci est lancé)
jeromek est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/12/2007, 10h17   #2
Membre du Club
 
Inscription : décembre 2006
Messages : 119
Détails du profil
Informations forums :
Inscription : décembre 2006
Messages : 119
Points : 61
Points : 61
Bonjour,

le plus simple est d'utiliser sql*loader, qui prend bien en compte ce type de fichier avec séparateur.
pat29 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/12/2007, 11h43   #3
Membre régulier
 
Antoine
Administrateur de base de données
Inscription : mars 2004
Messages : 79
Détails du profil
Informations personnelles :
Nom : Antoine
Localisation : Canada

Informations professionnelles :
Activité : Administrateur de base de données

Informations forums :
Inscription : mars 2004
Messages : 79
Points : 94
Points : 94
Envoyer un message via MSN à djeant Envoyer un message via Yahoo à djeant
Salut,

Voici un exemple de fichier de control SQL*Loader que tu peux utiliser pour charger tes données dans la table MA_TABLE.

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
 
LOAD DATA
INFILE *
TRUNCATE
INTO TABLE "MA_TABLE"
FIELDS TERMINATED BY ';'
TRAILING NULLCOLS
(COL1,
COL2,
COL3,
COL4,
COL5,
COL6)
begindata
1;752-124;52.57;20050101;20051231;lib1                            
2;752-463;94.51;20060101;20061231;lib2                  
3;752-485;36.55;20060101;20061231;lib3
l'appel ce fait de la façon suivante :
Code :
1
2
 
sqlldr mon_schema/mon_pwd@MA_BB control=mon_fichier.ctl logfile=mon_fichier.log
djeant est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/12/2007, 14h27   #4
Nouveau Membre du Club
 
Inscription : août 2004
Messages : 57
Détails du profil
Informations forums :
Inscription : août 2004
Messages : 57
Points : 36
Points : 36
Envoyer un message via ICQ à jeromek Envoyer un message via AIM à jeromek Envoyer un message via MSN à jeromek Envoyer un message via Yahoo à jeromek
Salut Djeant,

Merci pour l'info,

il s'avère que dans ma version, le paramètre pour le fichier log est log et pas logfile (pour la commande sqlldr)


Que fait la ligne TRAILING NULLCOLS ?

merci
jeromek est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/12/2007, 09h19   #5
Membre régulier
 
Antoine
Administrateur de base de données
Inscription : mars 2004
Messages : 79
Détails du profil
Informations personnelles :
Nom : Antoine
Localisation : Canada

Informations professionnelles :
Activité : Administrateur de base de données

Informations forums :
Inscription : mars 2004
Messages : 79
Points : 94
Points : 94
Envoyer un message via MSN à djeant Envoyer un message via Yahoo à djeant
Une erreur de copier coller surement...

Sinon le TRAILING NULLCOLS remplace les colonnes manquantes des le fichier texte par des null...

A+
djeant est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/12/2007, 09h50   #6
Nouveau Membre du Club
 
Inscription : août 2004
Messages : 57
Détails du profil
Informations forums :
Inscription : août 2004
Messages : 57
Points : 36
Points : 36
Envoyer un message via ICQ à jeromek Envoyer un message via AIM à jeromek Envoyer un message via MSN à jeromek Envoyer un message via Yahoo à jeromek
voila je n'ai plus qu'un souci, dans mon extraction j'ai des champs number non reseigné et donc le load echoue, je vais voir si je peux editer facilement les fichiers extraits
jeromek est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/12/2007, 10h12   #7
Membre régulier
 
Antoine
Administrateur de base de données
Inscription : mars 2004
Messages : 79
Détails du profil
Informations personnelles :
Nom : Antoine
Localisation : Canada

Informations professionnelles :
Activité : Administrateur de base de données

Informations forums :
Inscription : mars 2004
Messages : 79
Points : 94
Points : 94
Envoyer un message via MSN à djeant Envoyer un message via Yahoo à djeant
Le plus simple est de charger tes données dans une table temporaire sans aucune contraintes sur les colonnes.
De mettre à jour les colonnes null et de faire un insert dans ta table définitive.

Sinon il me semble que tu peux utiliser des fonctions type (NVL ou decode) sur les colonnes de ton fichier de contrôle ...
Mais je ne suis pas trop familier de SQL*Loader...
djeant est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/01/2008, 12h55   #8
Nouveau Membre du Club
 
Inscription : août 2004
Messages : 57
Détails du profil
Informations forums :
Inscription : août 2004
Messages : 57
Points : 36
Points : 36
Envoyer un message via ICQ à jeromek Envoyer un message via AIM à jeromek Envoyer un message via MSN à jeromek Envoyer un message via Yahoo à jeromek
Apparemment, je rencontre un problème sur les colonnes de type NUMBER

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
CREATE  TABLE CREDIT (
  CRCLEUNIK                        NUMBER NOT NULL,
  RECLIDP                          VARCHAR2(6),
  REDATDI                          VARCHAR2(8),
  REPRODUIT                        VARCHAR2(16),
  PRCODE                           VARCHAR2(10),
  REVOL                            NUMBER,
  RENOMPRES                        VARCHAR2(30),
  REINAPRES                        VARCHAR2(11),
  RECLIUT                          VARCHAR2(6),
  RERENDU                          VARCHAR2(10),
  PRUNIFAC                         NUMBER,
  REPRIX                           NUMBER(10,5),
  PRNOMEN                          VARCHAR2(7),
  RENUMFAC                         NUMBER,
  REDATFAC                         VARCHAR2(8),
  CRFLAG                           VARCHAR2(1),
  CONSTRAINT CREDIT_PK
    PRIMARY KEY ( CRCLEUNIK ) 
);
et j'obtiens nombre invalide pour la colonne REPRIX qui est souvent de format 75.91, je vais aller voir du coté de l'environnement régional voir si c'est un souci de séparateur décimal
jeromek est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/01/2008, 00h05   #9
Membre expérimenté

 
Avatar de NGasparotto
 
Nicolas Gasparotto
Inscription : janvier 2007
Messages : 424
Détails du profil
Informations personnelles :
Nom : Nicolas Gasparotto

Informations forums :
Inscription : janvier 2007
Messages : 424
Points : 500
Points : 500
Valeurs de NLS_NUMERIC_CHARACTERS et/ou NLS_TERRITORY ? Parametres dont depend le separateur en question.

Nicolas.
NGasparotto est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/01/2008, 07h25   #10
Nouveau Membre du Club
 
Inscription : août 2004
Messages : 57
Détails du profil
Informations forums :
Inscription : août 2004
Messages : 57
Points : 36
Points : 36
Envoyer un message via ICQ à jeromek Envoyer un message via AIM à jeromek Envoyer un message via MSN à jeromek Envoyer un message via Yahoo à jeromek
Lorsque je fait un export en ligne de commande je ne vois que la valeur NLS_LANG

Code :
1
2
 
declare -x NLS_LANG="FRENCH_BELGIUM.WE8ISO8859P1"
Il y a t'il moyen d'obtenir les valeur NLS_NUMERIC_CHARACTER en commande sql ?

*Edit*

Voila j'ai trouvé la valeur

Code :
1
2
3
4
5
6
 
SQL> SELECT value FROM v$nls_parameters WHERE parameter='NLS_NUMERIC_CHARACTERS';
 
VALUE
----------------------------------------------------------------
,.
Code :
1
2
3
4
5
6
 
SQL>  SELECT value FROM v$nls_parameters WHERE parameter='NLS_TERRITORY';
 
VALUE
----------------------------------------------------------------
BELGIUM
jeromek 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 16h59.


 
 
 
 
Partenaires

Hébergement Web