Bonjour,

J'ai une fonction SQL qui permet d'ajouter des zéros aux numéros qui contiennent moins de 4 chiffres :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
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
35
36
37
38
create or replace function COMPLETER_NUMERO_PAR_0(numero in VARCHAR2) return VARCHAR2 is
  numeroComplete VARCHAR2(10);
  longueur NUMBER;
  position NUMBER;
  isChiffre boolean;
  nbChiffreOK NUMBER;
begin
  numeroComplete := trim(numero);
  longueur := length(trim(numero));
 
  if (numeroComplete is not null and longueur > 0) then 
    position := 0;
    isChiffre := true;
 
    while position < longueur and isChiffre = true loop 
      position := position + 1;
      if substr(numeroComplete, position, 1) not between '0' and '9' then 
        isChiffre := false;
      end if;
    end loop;
 
    if isChiffre = false then
      nbChiffreOK := position - 1;
    else 
      nbChiffreOK := longueur;
    end if;
 
    while nbChiffreOK < 4 loop
      numeroComplete := '0'||numeroComplete;
      nbChiffreOK := nbChiffreOK + 1;
    end loop;
 
  else 
    numeroComplete := '0000';
  end if;
 
  return(numeroComplete);
end COMPLETER_NUMERO_PAR_0;
mais quand j'appelle cette fonction dans une requête, par exemple :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
SELECT NUMERO, TYPE, DESCRIPTION FROM TABLE WHERE ID=75239 AND COMPLETER_NUMERO_PAR_0(NUMERO) BETWEEN COMPLETER_NUMERO_PAR_0('1') AND COMPLETER_NUMERO_PAR_0('20') order by COMPLETER_NUMERO_PAR_0(NUMERO)
Le message d'erreur suivant est affiché :
6502: ORA-06502: PL/SQL: numeric or value error ORA-06512: at "TABLE_ADMIN.COMPLETER_NUMERO_PAR_0", line 29
La ligne 29 correspond à :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
numeroComplete := '0'||numeroComplete;
Est ce que vous pouvez m'aider à comprendre l'origine de l'erreur.
Merci d'avance.