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:
Ce fichier contient à chaque ligne deux nombres de 16 chiffres et une lettre qui est soit S soit N.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 00000000000000010000000000000002S 00000000000000010000000000000003S 00000000000000010000000000000004N 00000000000000040000000000000005S 00000000000000060000000000000007S
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é).
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?
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
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) )
Partager