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.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2"11 00 80 82 8C"
Ci dessous la fonction PL permettant de convertir une chaine en suite de code ascii décimaux. La fonction fonctionne
ci dessous le ctl d'import
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 la table :
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)" )
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.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 create table comp3test (DVEOP1 varchar2(15)) ;
Si vous voyez d'ou çà vient car là j'en perd mon latinJe pencherai pour un problème de charset avec une réinterprétation par Oracle du code en quelque chose qu'il connait mais bon
Partager