IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Oracle Discussion :

Erreur ORA 06502 sur fonction


Sujet :

Oracle

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Février 2007
    Messages
    36
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 36
    Points : 27
    Points
    27
    Par défaut Erreur ORA 06502 sur fonction
    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 :

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

  2. #2
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Février 2007
    Messages
    36
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 36
    Points : 27
    Points
    27
    Par défaut
    J'ai oublié de préciser que lorsque je fais

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select soundex_fr(nom) from asg
    j'obtient les bons résultats

  3. #3
    Membre expérimenté Avatar de ojo77
    Homme Profil pro
    Architecte de base de données
    Inscrit en
    Décembre 2010
    Messages
    680
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Architecte de base de données
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Décembre 2010
    Messages : 680
    Points : 1 597
    Points
    1 597
    Par défaut
    Bonjour,

    A mon avis la colonne nom a une valeur nulle dans certain cas ...
    Si vous passez la commande suivante cela fonctionne-t-il ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    UPDATE asg SET nom= soundex_fr(nom) where nom is not null;

Discussions similaires

  1. Erreur ORA-06502 appel de fonction
    Par nessing dans le forum SQL
    Réponses: 1
    Dernier message: 02/05/2011, 15h25
  2. Erreur ORA-01555 sur un select
    Par LRI dans le forum Oracle
    Réponses: 2
    Dernier message: 13/05/2005, 10h42
  3. ORA-06502 sur un delete
    Par DBS dans le forum Oracle
    Réponses: 61
    Dernier message: 01/04/2005, 16h01
  4. Erreur ORA-04082 sur un trigger
    Par elcaro92 dans le forum Oracle
    Réponses: 2
    Dernier message: 31/01/2005, 21h30
  5. Erreur ORA-01036 sur un XMLGRAM
    Par sch dans le forum XMLRAD
    Réponses: 5
    Dernier message: 07/09/2004, 14h56

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo