Replace in Function for SQL*Loader
	
	
		:resolu: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:
	
| 12
 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:
	
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:
	
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
	 
	
	
	
		[Résolu] Replace in Function for SQL*Loader
	
	
		OK, j'ai fini par mettre le doigt sur le problème:
PL/SLQ n'aime pas les ELSE sans rien. Ca génèrait une erreur de compilation. Avec cette modification: plus de soucis.
	Code:
	
| 12
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 
 | 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,',','.');
 
END IF;
 
RETURN w_result_str;
 
END str_ratio_convert;
 
/
 
exit; |