Bonjour,
Tu es confronté à un problème de NLS.
1) oui, le fait de mettre '2.2' implique une conversion implicite d'une chaîne de caractères vers un nombre
2) la conversion se fait dans ton cas via les paramètres NLS. Tu peux consulter les paramètres de ta session via la vue :
select * from nls_session_parameters ;
Regarde en particulier ce que vaut le paramètre NLS_NUMERIC_CHARACTERS. Il donne 2 caractères que l'on appelle dg. Peut-être as-tu ,. comme valeur, ce qui signifie d=, et g=.
d est le séparateur numérique
g est le séparateur des milliers
Rien n'empêche de les modifier via un :
alter session set NLS_NUMERIC_CHARACTERS='.,' ;
car fixer les paramètres NLS_LANGUAGE et NLS_TERRITORY ne suffit pas toujours.
3) un moyen de s'affranchir des paramètres NLS est de spécifier le format en utilisant la fonction TO_NUMBER. Par exemple, si je veux mettre 2500,5 :
update test set num = to_number ('2.500,5', '9G999D9', 'NLS_NUMERIC_CHARACTERS='',.''') ;
4) au niveau de la planification de ton job : je pense que ton pb provient de ce que je te disais au point 2). Essaye de jouer sur le NLS_NUMERIC_CHARACTERS
5) lorsque tu planifies un job via la procédure DBMS_JOB.SUBMIT, il faut savoir qu'Oracle récupère tes paramètres NLS de session, et les stocke. Tu peux voir ces paramètres en regardant la colonne NLS_ENV de la vue USER_JOBS.
Au final, tu peux donc gérer les paramètres NLS via un ALTER SESSION dans ta procédure stockée, ou bien les positionner correctement avant le SUBMIT de ton job.
Partager