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 07/02/2007, 11h47   #1
Futur Membre du Club
 
Inscription : avril 2005
Messages : 53
Détails du profil
Informations personnelles :
Localisation : Canada

Informations forums :
Inscription : avril 2005
Messages : 53
Points : 15
Points : 15
Par défaut SQLLDR - control file special

Bonjour,

J'ai un peu de mal à concevoir mon fichier de controle :

En entrée j'ai un fichier texte, les champs sont séparés par des ';'.

J'ai besoin de le charger dans 2 champs de la table cible de la façon suivante :
Citation:
Champ1_cible = champ1_source + '_' + champ2_source
Champ2_cible = toute la ligne source (incluant les 2 champs déjà traité au dessus)
La taille des champs source n'est pas fixe.

Est ce possible ? si oui, comment réalisé mon fichier de controle ?

Pour l'instant j'ai fait ça :

Code :
1
2
3
4
5
6
7
LOAD DATA
INTO TABLE "TMP"
APPEND
TRAILING NULLCOLS (
C_1 ?????? ,
C_2 CHAR(4000) TERMINATED BY '\r'
)
plasticgoat est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/02/2007, 12h15   #2
Responsable Business Intelligence
 
Avatar de kalyparker
 
Femme
Consultant en Business Intelligence
Inscription : janvier 2007
Messages : 1 192
Détails du profil
Informations personnelles :
Sexe : Femme
Localisation : France

Informations professionnelles :
Activité : Consultant en Business Intelligence

Informations forums :
Inscription : janvier 2007
Messages : 1 192
Points : 2 564
Points : 2 564
Bonjour,

ce genre de question à déjà été posté

Il faut passer par une table temporaire pour faire ce genre de chose.

Par contre ta requete ne risque pas de marcher si tu n'utilise pas FIELDS TERMINATED BY';'

en gros tu devrais avoir quelques choses comme ça :
Code :
1
2
3
4
5
LOAD DATA INFILE 'mon_fichier.txt'
APPEND
INTO TABLE "TMP"
FIELDS TERMINATED BY';'
(C_1,C_2)
kalyparker est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/02/2007, 12h29   #3
Rédacteur/Modérateur
 
Avatar de orafrance
 
Inscription : janvier 2004
Messages : 15 861
Détails du profil
Informations personnelles :
Âge : 35

Informations forums :
Inscription : janvier 2004
Messages : 15 861
Points : 16 212
Points : 16 212
passer par une external table ce serait aussi bien
orafrance est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/02/2007, 13h51   #4
Rédacteur
 
Inscription : décembre 2002
Messages : 2 397
Détails du profil
Informations personnelles :
Localisation : France, Var (Provence Alpes Côte d'Azur)

Informations forums :
Inscription : décembre 2002
Messages : 2 397
Points : 3 298
Points : 3 298
Citation:
Envoyé par kalyparker
Il faut passer par une table temporaire pour faire ce genre de chose.
Je pratique peu SQL*Loader, et je n'en maîtrise pas les subtilités, mais il me semble qu'on n'a pas besoin d'en passer par des tables temporaires pour si peu.
En effet, même pour des champs avec séparateur, on peut utiliser le mot-clé POSITION(1) pour revenir à la première colonne de la ligne, ce qui permet de relire le premier champ.
Pomalaix est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/02/2007, 14h28   #5
Responsable Business Intelligence
 
Avatar de kalyparker
 
Femme
Consultant en Business Intelligence
Inscription : janvier 2007
Messages : 1 192
Détails du profil
Informations personnelles :
Sexe : Femme
Localisation : France

Informations professionnelles :
Activité : Consultant en Business Intelligence

Informations forums :
Inscription : janvier 2007
Messages : 1 192
Points : 2 564
Points : 2 564
Citation:
En effet, même pour des champs avec séparateur, on peut utiliser le mot-clé POSITION(1) pour revenir à la première colonne de la ligne, ce qui permet de relire le premier champ.
Je sais pas, j'ai jamais testé.

En fait c'était surtout pour la première partie de la condition que je disais qu'il fallait utiliser une table temporaire :

Code :
Champ1_cible = champ1_source + '_' + champ2_source
Car je crois qu'il n'est pas possible de faire cela d'une autre façon. (ce n'est que mon avis )
kalyparker est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/02/2007, 14h33   #6
Rédacteur/Modérateur
 
Avatar de orafrance
 
Inscription : janvier 2004
Messages : 15 861
Détails du profil
Informations personnelles :
Âge : 35

Informations forums :
Inscription : janvier 2004
Messages : 15 861
Points : 16 212
Points : 16 212
Citation:
Envoyé par Pomalaix
En effet, même pour des champs avec séparateur, on peut utiliser le mot-clé POSITION(1) pour revenir à la première colonne de la ligne, ce qui permet de relire le premier champ.
mais malheureusement il s'arrête au 1° séparateur en principe
orafrance 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 12h56.


 
 
 
 
Partenaires

Hébergement Web