Précédent   Forum des professionnels en informatique > Bases de données > Oracle > SQL
SQL Forum d'entraide sur le SQL pour 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 27/05/2008, 16h31   #1
Membre éclairé
 
Avatar de icsor
 
Homme
Développeur informatique
Inscription : mai 2008
Messages : 219
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 31
Localisation : France, Nord (Nord Pas de Calais)

Informations professionnelles :
Activité : Développeur informatique
Secteur : Distribution

Informations forums :
Inscription : mai 2008
Messages : 219
Points : 317
Points : 317
Par défaut Fichier de control et vérification de données

Bonjour,

j'essaye de construite un fichier de controle sous oracle 10g permettant l'intégration dans la base de données venant d'un fichier texte. Le fichier texte est de la forme:

Code :
1
2
3
4
5
00000000000000010000000000000002S
00000000000000010000000000000003S
00000000000000010000000000000004N
00000000000000040000000000000005S
00000000000000060000000000000007S
Ce fichier contient à chaque ligne deux nombres de 16 chiffres et une lettre qui est soit S soit N.

Ce que j'aimerai faire, c'est vun fichier de controle qui vérifie que le caractère en position 33 (le dernier donc) est soit un S, soit un N (qui ne prenne pas d'autre valeur et qu'il ne soit pas null).

J'ai fait un fichier de controle qui vérifie que le 33 ieme caractère est bien un S ou un N. Le problème c'est que pour moi, c'est vraiment de la bidouille (déjà, dire que mon cod_eta_ded était sur deux caractères était obligatoire pour moi, car sinon il ignoré la fin de la ligne, et donc me chargeait la ligne alors qu'elle ne devait pas être chargé).
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
OPTIONS (DIRECT = TRUE)
LOAD DATA
BADFILE '$HOME/log/import_foyer.bad'
DISCARDFILE '$HOME/log/import_foyer.dis'
APPEND
 
INTO TABLE i14_foyer_input
when ((33:33) = 'S')
(
ID_CLIENT position (1:16),
ID_CLIENT_LIEN position (17:32),
COD_ETA_DED position (33:34)
)
 
INTO TABLE i14_foyer_input
when ((33:33) = 'N')
(
ID_CLIENT position (1:16),
ID_CLIENT_LIEN position (17:32),
COD_ETA_DED position (33:34)
)
Y-a-t-il moyen de faire des choses plus élégantes (et qui pourrait fonctionné si j'ai plus de valeur un jour, on ne sait jamais) sans modifier les contraintes sur la table?
icsor est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/05/2008, 17h15   #2
Expert Confirmé Sénior
 
Avatar de mnitu
 
Homme Marius Nitu
Ingénieur développement logiciels
Inscription : octobre 2007
Messages : 3 320
Détails du profil
Informations personnelles :
Nom : Homme Marius Nitu
Localisation : France, Marne (Champagne Ardenne)

Informations professionnelles :
Activité : Ingénieur développement logiciels
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : octobre 2007
Messages : 3 320
Points : 5 839
Points : 5 839
Que est-ce qu'il faut faire si le caractère n'est ni S ni N ?
mnitu est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/05/2008, 17h20   #3
Membre éclairé
 
Avatar de icsor
 
Homme
Développeur informatique
Inscription : mai 2008
Messages : 219
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 31
Localisation : France, Nord (Nord Pas de Calais)

Informations professionnelles :
Activité : Développeur informatique
Secteur : Distribution

Informations forums :
Inscription : mai 2008
Messages : 219
Points : 317
Points : 317
Si la ligne se fini par S ou N, il faut l'écrire dans la base, sinon, il ne faut pas l'écrire.
icsor est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/05/2008, 17h41   #4
Expert Confirmé Sénior
 
Avatar de mnitu
 
Homme Marius Nitu
Ingénieur développement logiciels
Inscription : octobre 2007
Messages : 3 320
Détails du profil
Informations personnelles :
Nom : Homme Marius Nitu
Localisation : France, Marne (Champagne Ardenne)

Informations professionnelles :
Activité : Ingénieur développement logiciels
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : octobre 2007
Messages : 3 320
Points : 5 839
Points : 5 839
Utiliser une table externe ça ne te convient pas ?
mnitu est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/05/2008, 09h04   #5
Membre éclairé
 
Avatar de icsor
 
Homme
Développeur informatique
Inscription : mai 2008
Messages : 219
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 31
Localisation : France, Nord (Nord Pas de Calais)

Informations professionnelles :
Activité : Développeur informatique
Secteur : Distribution

Informations forums :
Inscription : mai 2008
Messages : 219
Points : 317
Points : 317
Utiliser une table externe et mettre des contraintes dessus? C'est une possibilité, mais je ne sais pourquoi, mes contraintes passent en disable quand j'essaie un import.
icsor est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/05/2008, 11h44   #6
Expert Confirmé Sénior
 
Avatar de mnitu
 
Homme Marius Nitu
Ingénieur développement logiciels
Inscription : octobre 2007
Messages : 3 320
Détails du profil
Informations personnelles :
Nom : Homme Marius Nitu
Localisation : France, Marne (Champagne Ardenne)

Informations professionnelles :
Activité : Ingénieur développement logiciels
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : octobre 2007
Messages : 3 320
Points : 5 839
Points : 5 839
Non.
A la place de chargement par sql_loader tu peut créer une table externe.
Ensuite tu peut écrire
Code :
1
2
3
4
5
 
INSERT INTO i14_foyer_input(ID_CLIENT, ID_CLIENT_LIEN, COD_ETA_DED)
SELECT ID_CLIENT, ID_CLIENT_LIEN, COD_ETA_DED
  FROM ma_table_ext
 WHERE cod_etat_ded IN ('S','N');
mnitu est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/05/2008, 15h08   #7
Membre éclairé
 
Avatar de icsor
 
Homme
Développeur informatique
Inscription : mai 2008
Messages : 219
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 31
Localisation : France, Nord (Nord Pas de Calais)

Informations professionnelles :
Activité : Développeur informatique
Secteur : Distribution

Informations forums :
Inscription : mai 2008
Messages : 219
Points : 317
Points : 317
Effectivement, vu comme ça, c'est plus jolie et assez simple.

Merci beaucoup pour ta solution.
icsor est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/05/2008, 15h11   #8
Membre chevronné
 
Avatar de philcero
 
Inscription : septembre 2007
Messages : 519
Détails du profil
Informations personnelles :
Âge : 40
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations forums :
Inscription : septembre 2007
Messages : 519
Points : 649
Points : 649
J'arrive après la bataille mais il me semble qu'une table externe avec une view filtrant uniquement ceux qui finissent par S ou N serait plus élégant et propre...

Par extension deux views seraient encore plus propre, une view qui donne les enregistrements corrects et en opposition une view qui donne les incorrects (traitement applicatif de correction derrière peut-être).
philcero est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 17h49.


 
 
 
 
Partenaires

Hébergement Web