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

SQL Oracle Discussion :

Erreur fonction SQL


Sujet :

SQL Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 22
    Par défaut Erreur fonction SQL
    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.

  2. #2
    Membre chevronné Avatar de elbj
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Novembre 2004
    Messages
    371
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Services à domicile

    Informations forums :
    Inscription : Novembre 2004
    Messages : 371
    Par défaut
    Bonjour

    Peut être que ce code fonctionnera mieux :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT RIGHT(CONCAT('0000',COALESCE(TRIM(numero),'0000')),4)
    Cordialement

  3. #3
    Expert confirmé Avatar de mnitu
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2007
    Messages
    5 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2007
    Messages : 5 611
    Par défaut
    Citation Envoyé par Student3010 Voir le message
    Bonjour,

    J'ai une fonction SQL qui permet d'ajouter des zéros aux numéros qui contiennent moins de 4 chiffres :
    ...
    Je la supprime et j’utilise LPad.

  4. #4
    Expert éminent
    Avatar de orafrance
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    15 967
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15 967
    Par défaut
    ou comment réinventer la roue... en la faisant carré

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 22
    Par défaut
    Merci beaucoup. J'ai utilisé LPAD et ça marche.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [A-07] SQL erreur fonction agrégat compte max
    Par chus03 dans le forum Requêtes et SQL.
    Réponses: 2
    Dernier message: 27/12/2008, 21h53
  2. catch des erreurs dans SQL+
    Par lalystar dans le forum Oracle
    Réponses: 2
    Dernier message: 21/09/2004, 15h17
  3. fonction sql "LIMIT" en interbase?
    Par GMI dans le forum InterBase
    Réponses: 6
    Dernier message: 20/09/2004, 14h04
  4. message d'erreur "Microsoft SQL-DMO"
    Par tachi dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 17/08/2004, 11h47
  5. méssage d'erreur fonction d'agrégat
    Par developpeur_mehdi dans le forum Langage SQL
    Réponses: 4
    Dernier message: 10/03/2004, 12h42

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