Bonjour à tous,

J'ai un petit soucis de conversion de données.

Je cherche à insérer dans un champs DEC(18,2) une donnée depuis un fichier plat via SQL*Loader.

malheureusement, contient des séparateurs de milliers sous forme de points et un séparateur de millier sous forme de virgule: 1.000.000,10
Je souhaite une sortie de type: 1000000.10

Pour se faire, j'ai créé une fonction de ce type:



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
23
24
25
26
27
28
CREATE or REPLACE
FUNCTION str_ratio_convert(w_str_orig IN VARCHAR2) RETURN VARCHAR2 IS
 
w_result_str LONG;
 
BEGIN
 
w_result_str :='';
 
IF LENGTH(w_str_orig) > 0 THEN
 
-- Remove dot (.)
w_result_str := REPLACE(w_str_orig,'.','');
-- Replace coma (,) per dot (.)
w_result_str := REPLACE(w_result_str,',','.');
 
ELSE
END IF;
 
RETURN w_result_str;
 
 
END str_ratio_convert;
 
 
/
 
exit;
Et je l'insère dans mon SL*Loader ainsi:

Code : Sélectionner tout - Visualiser dans une fenêtre à part
UMSAV "str_ratio_convert(UMSAV)",
Mais j'ai systématiquement une erreur ORA-06575: Package or Function str_ratio_convert is in an invalid state.

J'ai essayé en faisant une soirtie en DEC, mais il n'aime pas.
J'ai tenté en mettant dans SQL*Loader deux points avant le nom de mon champs, mais il n'aime pas:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
UMSAV "str_ratio_convert(:UMSAV)",
J'ai vraiment besoin d'un coup de main sur ce problème sachant que je ne peux pas toucher à la configuration d'ORACLE.

Merci beaucoup pour votre aide.

sOnO