Bonjour à tous,
J'ai créé une fonction pour adapter l'algorithme du soundex au français sous Oracle 10g.
J'applique cette fonction sur un champ nom. Je mets à jour ce champs avec l'instruction :
update asg set nom= soundex_fr(nom)
Cette fonction fonctionne bien sur trois tables et sur des champs différents mais sur une table, elle me génère une erreur ORA 06502. Je ne comprends pas trop les champs sont du meme type que pour les autres tables. En revanche la volumétrie est plus importante.
Voici le code me procédure :
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 29 30 31 32 33 34
| create or replace function soundex_fr( p_string in varchar2 ) return varchar2
deterministic
as
l_return_string varchar2(6) default substr( p_string, 1, 1 );
l_char varchar2(1);
l_last_digit number default 0;
type vcArray is table of varchar2(10) index by binary_integer;
l_code_table vcArray;
begin
l_code_table(1) := 'BP';
l_code_table(2) := 'CKQ';
l_code_table(3) := 'DT';
l_code_table(4) := 'L';
l_code_table(5) := 'MN';
l_code_table(6) := 'R';
l_code_table(7) := 'G,J';
l_code_table(8) := 'XZS';
l_code_table(9) := 'FV';
for i in 1 .. length(p_string)
loop
exit when (length(l_return_string) = 6);
l_char := upper(substr( p_string, i, 1 ) );
for j in 1 .. l_code_table.count
loop
if (instr(l_code_table(j), l_char ) > 0 AND j <> l_last_digit)
then
l_return_string := l_return_string || to_char(j,'fm9');
l_last_digit := j;
end if;
end loop;
end loop;
return rpad( l_return_string, 6, '0' );
end; |
Et voici l'erreur générée:
Erreur commençant à la ligne 1 de la commande :
update asg set nom= soundex_fr(nom)
Rapport d'erreur :
Erreur SQL : ORA-06502: PL/SQL : erreur numérique ou erreur sur une valeur: tampon de chaîne de caractères trop petit
ORA-06512: à "PERF_AS.SOUNDEX_FR", ligne 23
06502. 00000 - "PL/SQL: numeric or value error%s"
*Cause:
*Action:
Quelqu'un aurait une idée??
Partager