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:
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:
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:
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
| 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; |