Qu’est-ce que vous n’avez pas compris ? Et par ailleurs qu’est-ce que vous avez compris ?
Version imprimable
Je n'ai pas compris comment se fait le plan Oracle. Et de toute façon, parler de récupération de séquences d'octets est pour moi trop proche du fonctionnement machine...
Je comprend de ton message que selon toi chaque outil a sa propre façon de transformer une même série d'octets afin d'en produire un affichage compréhensible et qu'il pourrait y avoir des différences lors de l'affection dans le langage cible.
En tous cas je ne pense pas que l'ETL Informatica soit moins précis (l'option high précision que j'ai activé permet de gérer 28 décimale).
J'aimerais être sur que Toad ramène bien ce qu'il faut.
Que donne le select * from toto, exécuté normalement (avec CTRL+Entrée)
Ce qu'a dit Waldar c'est qu'exécuté en tant que script, le résultat est arrondi, mais normalement exécuté, dans la data_grid, tu dois avoir la précision max.
OK. Laissez tomber le plan d’exécution d’Oracle.
- Un util qui interrogé Oracle peut décider d’afficher un nombre des décimales inférieur à la précision avec laquelle la valeur est stockée dans la base. Parfois des paramètres propres à l’outil permettent d’augmenter cette précision.
- Oracle est un peu spécial dans la gestion des valeurs numériques : il peut stocker des valeurs avec une précision bien supérieure que la plupart des langages de programmation. Ce fait peut avoir pour conséquence une perte de précision lors du transfert des valeurs entre Oracle et le langage.
- les outils qui interrogent Oracle sont écrits dans des langages de programmation qui ne permettent pas forcement de garder la précision. Les types usuels : float et double ont une précision inférieure à celle du Number d’Oracle.
Je ne connais pas Informatica mais si vous « savez » qu’il est capable de gérer la même précision qu’Oracle alors soit vous ne devez pas avoir des problèmes soit vous devez étudier attentivement la documentation.
Dernière remarque : utiliser la fonction dump c’est proche du langage machine.
Parfois un exemple est plus parlant
Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29 Connected to Oracle Database 10g Enterprise Edition Release 10.2.0.4.0 Connected as mni SQL> set serveroutput on SQL> SQL> Declare 2 a number(38,28); 3 b Binary_Float; 4 c Binary_Double; 5 Begin 6 Select toto, toto, toto 7 Into a, b, c 8 From toto; 9 -- 10 Dbms_output.put_line('Number ='||To_Char(a, '999D99999999999999999999')); 11 Dbms_output.put_line('Float =' ||To_Char(b, '999D99999999999999999999')); 12 Dbms_output.put_line('Double ='||To_Char(c, '999D99999999999999999999')); 13 -- 14 End; 15 / Number = 123,12345678901234567000 Float = 123,12345900000000000000 Double = 123,12345678901235000000 PL/SQL procedure successfully completed SQL>