:oops: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:
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'importCode:
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:
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:
1
2 create table comp3test (DVEOP1 varchar2(15)) ;
Si vous voyez d'ou çà vient car là j'en perd mon latin :aie: 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