Précédent   Forum des professionnels en informatique > Bases de données > Oracle > PL/SQL
PL/SQL Forum d'entraide sur le PL/SQL
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 16/10/2011, 19h18   #1
Invité de passage
 
keri mozant
Inscription : février 2010
Messages : 5
Détails du profil
Informations personnelles :
Nom : keri mozant

Informations forums :
Inscription : février 2010
Messages : 5
Points : 1
Points : 1
Par défaut Problème de conversion d'un varchar2 en Number(15,10)

Bonjour,
j'ai un Varchar2 contenant la chaine de caractère suivante :
123456789012345.1234567890 , je veux stocker cette chaîne dans un NUMBER(15,10) ,je veux pas qu'il me prenne 11 chiffre apres la virgule par exemple, Or, je constate qu'il me les prend, j'ai utilisé la fonction To_NUMBER avec toutes possibilité imajinables , Aidez moi Svp
Merci d'avance
keredinio est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/10/2011, 21h22   #2
McM
Expert Confirmé Sénior
 
Inscription : juillet 2003
Messages : 3 440
Détails du profil
Informations forums :
Inscription : juillet 2003
Messages : 3 440
Points : 4 183
Points : 4 183
Peux tu préciser les ordres d'insertion en base, et de select qui t'amène à dire ça ?

Premièrement, un number(15,10), c'est 5 chiffres avant la virgule et 10 après.. (15 dont 10)
Faudrait donc déclarer un number(25,10)
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
declare
 n1 NUMBER(25,10);
  c VARCHAR2(30) := '123456789012345.1234567890';
 n2 NUMBER(15,10);
begin
 n1 := to_number(c, '999999999999999D9999999999', 'NLS_NUMERIC_CHARACTERS = ''.,''');
--
 n2 := to_number(c, '999999999999999D9999999999', 'NLS_NUMERIC_CHARACTERS = ''.,''');
end;
 
 
Erreur commençant à la ligne 1 de la commande :
declare
 n1 NUMBER(25,10);
  c VARCHAR2(30) := '123456789012345.1234567890';
 n2 NUMBER(15,10);
begin
 n1 := to_number(c, '999999999999999D9999999999', 'NLS_NUMERIC_CHARACTERS = ''.,''');
--
 n2 := to_number(c, '999999999999999D9999999999', 'NLS_NUMERIC_CHARACTERS = ''.,''');
end;
Rapport d'erreur :
ORA-06502: PL/SQL : erreur numérique ou erreur sur une valeur: précision de NUMBER trop élevée
ORA-06512: à ligne 8
06502. 00000 -  "PL/SQL: numeric or value error%s"
__________________
More Code : More Bugs. Less Code : Less Bugs
McM est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 17/10/2011, 10h08   #3
Invité de passage
 
keri mozant
Inscription : février 2010
Messages : 5
Détails du profil
Informations personnelles :
Nom : keri mozant

Informations forums :
Inscription : février 2010
Messages : 5
Points : 1
Points : 1
Merci Mcm , j'ai bien déclaré un NUMBER(25,10) c'est une erreur de frappe désolé.
Alors la chaine de caractère provient d'une table contenant que des varchar2(4000), (table d'import non typée), Je dois prendre cette valeur qui représente un montant et la mettre dans ma table typée ( NUMBER(25,10)) .
j'essaie avec cette requête qui me retroune 123456789012345
Code :
SELECT to_number('123456789012345,12345') FROM dual
quand j'essaie d'inserer cette ligne dans ma table contenant la colonne typée MNT NUMBER (25,10)
Code :
INSERT INTO TEST_ksk(MNT)  SELECT to_number('123456789012345,12345') FROM dual
je vérifie ce qu'est inséré dans ma table
j'obtiens bizarrement
123456789012345,0080000000

Help
keredinio est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/10/2011, 10h27   #4
Rédacteur/Modérateur
 
Avatar de orafrance
 
Inscription : janvier 2004
Messages : 15 861
Détails du profil
Informations personnelles :
Âge : 34

Informations forums :
Inscription : janvier 2004
Messages : 15 861
Points : 16 212
Points : 16 212
C'est simplement le format de restitution de ton client qui doit être configuré pour ajouter les 0

Edit : ,08 ??? C'est quoi cette histoire ?
orafrance est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/10/2011, 10h58   #5
Invité de passage
 
keri mozant
Inscription : février 2010
Messages : 5
Détails du profil
Informations personnelles :
Nom : keri mozant

Informations forums :
Inscription : février 2010
Messages : 5
Points : 1
Points : 1
Je crois que le .008 est un bug d'oracle , , en faisant mes tests avec des petites chaines de caracteres , tout foncitionne , par contre essaie d'exéctuer cette requête , tu verra que tu obtiendras le fameux .0080
Code :
  SELECT CAST(to_number(substr('123456789012345.1234567899', 1, instr('123456789012345.1234567899', '.') + 14), '999999999999999.9999999999') AS NUMBER(25,10))  FROM dual
keredinio est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/10/2011, 13h40   #6
Invité de passage
 
keri mozant
Inscription : février 2010
Messages : 5
Détails du profil
Informations personnelles :
Nom : keri mozant

Informations forums :
Inscription : février 2010
Messages : 5
Points : 1
Points : 1
Citation:
Envoyé par keredinio Voir le message
Je crois que le .008 est un bug d'oracle , , en faisant mes tests avec des petites chaines de caracteres , tout foncitionne , par contre essaie d'exéctuer cette requête , tu verra que tu obtiendras le fameux .0080
Code :
  SELECT CAST(to_number(substr('123456789012345.1234567899', 1, instr('123456789012345.1234567899', '.') + 14), '999999999999999.9999999999') AS NUMBER(25,10))  FROM dual
Une piste ?
keredinio est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/10/2011, 16h14   #7
McM
Expert Confirmé Sénior
 
Inscription : juillet 2003
Messages : 3 440
Détails du profil
Informations forums :
Inscription : juillet 2003
Messages : 3 440
Points : 4 183
Points : 4 183
Moi ça ramène le bon chiffre (toad sous oracle 9.2.0.7)
__________________
More Code : More Bugs. Less Code : Less Bugs
McM est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 11h23.


 
 
 
 
Partenaires

Hébergement Web