Bonjour a tous,

Je dois importer des données d'un fichier en provenance d'un as400 avec des données binaires de type comp3. Je rencontre un problème d'intérprétation de byte que j'arrive à reproduire avec le mode opératoire suivant. D'où celà peut-il venir ?

Ci dessous le fichier à importer :
Pour le créer, ouvrez ultraedit en mode hexa. Ce que je donne ce sont les codehexa des 5 caractères représentant le fichier.

Ci dessous la fonction PL permettant de convertir une chaine en suite de code ascii décimaux. La fonction fonctionne
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
22
 
CREATE OR REPLACE FUNCTION comp3_to_asc (
   p_valeur     IN   VARCHAR2,
   p_longueur   IN   NUMBER,
   p_decimal    IN   NUMBER := 0
)
   RETURN varchar2
IS
   v_num      NUMBER (20, 2);
   machaine   VARCHAR2 (100);
bEGIN
   v_num := 0;
   machaine := '';
 
   FOR i IN 1 ..p_longueur 
   LOOP
      machaine :=
            machaine
         || LPAD (ASCII (SUBSTR (p_valeur, i, 1)), 3, '0');
   END LOOP;         
RETURN (machaine);
END;
ci dessous le ctl d'import
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
 
LOAD DATA
   INFILE 'comp3test.txt'
   BADFILE 'comp3test.txt'
   REPLACE
INTO TABLE comp3test (
DVEOP1    POSITION(1:5) "comp3_to_asc(:DVEOP1,5)"
)
ci dessous la table :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
 
create table comp3test (DVEOP1  varchar2(15)) ;
Je devrais retrouver dans la table après import : 017 000 128 130 140 et à mon grand malheur je me retrouve avec 017 000 191 191 191.

Si vous voyez d'ou çà vient car là j'en perd mon latin Je pencherai pour un problème de charset avec une réinterprétation par Oracle du code en quelque chose qu'il connait mais bon