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 : Sélectionner tout - Visualiser dans une fenêtre à part
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.