Certains caractères ont une taille différente de 1 ?
Bonjour
La fonction PL/SQL ci-dessous, sous Oracle, me permet de formater des caractères dans un support numérique afin d'y extirper certains caractères et permettre un alignement parfait avant impression.
Appelée avec cette chaîne de caractère 'LIQUIDATION PRÊT ECHU', j'ai le message d'erreur suivant : ORA-06502 : PL/SQL : erreur numérique ou erreur sur une valeur: tampon de chaîne de caractères trop petit.
Sans message d'erreur si j'essai cet ordre : select SUBSTR('LIQUIDATION PRÊT ECHU', 15 , 1) from dual
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13
| FUNCTION filter_swift_char(p_in_str VARCHAR2) RETURN VARCHAR2 is
l_SWIFTCharSet Varchar2(100) := 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789.,- ()+/=*&%:?!"<>;~`@#$^_[]{}|';
l_out_str VARCHAR2(32000) := p_in_str;
l_CharToChk VARCHAR(1); -- le 1 doit être remplacé par 2 ou 3 pour marcher, et des fois aucune taille ne lui correspond
BEGIN
FOR l_inx IN 1..NVL(LENGTH(p_in_str), 0) LOOP
l_CharToChk := SUBSTR(p_in_str, l_inx , 1);
IF INSTR(l_SWIFTCharSet , l_CharToChk) = 0 THEN
l_out_str := REPLACE(l_out_str, l_CharToChk);
END IF;
END LOOP;
RETURN l_out_str;
END; |
Merci de votre assistance pour comprendre et solutionner mon problème.
Regards.