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 :

Pb avec TO_NUMBER


Sujet :

Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Nouveau membre du Club
    Inscrit en
    Janvier 2010
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Janvier 2010
    Messages : 8
    Par défaut Pb avec TO_NUMBER
    Bonjour,

    J'exécute une fonction stockée sur PL/SQL, et j'obtiens l'erreur suivante:
    ORA-06502: PL/SQL : erreur numérique ou erreur sur une valeur

    Cette erreur vient de la ligne suivante:
    c:=TO_NUMBER(vseq,'99999999') + 1;
    vseq est une variable de type varchar2

    est ce que qlq pourrait il m'aider??

    Merci d'avance

  2. #2
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Sr. Specialist Solutions Architect @Databricks
    Inscrit en
    Septembre 2008
    Messages
    8 454
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Sr. Specialist Solutions Architect @Databricks
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 454
    Par défaut
    Il faudrait la valeur de vseq qui fait planter le bloc PL/SQL, mais j'imagine que c'est une erreur de format ou alors il y a des caractères non numériques dans la variable.

  3. #3
    Nouveau membre du Club
    Inscrit en
    Janvier 2010
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Janvier 2010
    Messages : 8
    Par défaut
    Je pense que la valeur de vseq est renseigné.
    Voici le code:
    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
     
    CREATE OR REPLACE FUNCTION IDENTIFIANT(vcategorie IN VARCHAR2,vregion IN VARCHAR2) 
    RETURN VARCHAR2
    IS
    vres VARCHAR2(30);
     
    BEGIN
     
       DECLARE 
     
         i NUMBER(10);
         p NUMBER(10);
         sm NUMBER(10):=0;
         mx NUMBER(10):=9;
         v NUMBER(10);
         d NUMBER(10);
         c NUMBER(10);
         vr VARCHAR2(20);
         vseq VARCHAR2(20);
         vcle VARCHAR2(20);
         vres1 VARCHAR2(20);	
     
     
      BEGIN
    	SELECT code_sequence INTO vseq FROM sequentiel;
    	c:=TO_NUMBER(vseq,'99999999')+1;
           /* la suite */

  4. #4
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Sr. Specialist Solutions Architect @Databricks
    Inscrit en
    Septembre 2008
    Messages
    8 454
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Sr. Specialist Solutions Architect @Databricks
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 454
    Par défaut
    Vous pouvez (r)ajouter ceci à votre bloc :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    EXCEPTION
       WHEN OTHERS THEN
          dbms_output.put_line('vseq : ' || vseq);
    Histoire de voir qu'est-ce qui ne va pas exactement.

  5. #5
    Nouveau membre du Club
    Inscrit en
    Janvier 2010
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Janvier 2010
    Messages : 8
    Par défaut
    Qd j'ai rajouté cette ligne à ce bloc.
    Procédure PL/SQL terminée avec succès.
    est ce que ca veut dire que c'est bon:

  6. #6
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Sr. Specialist Solutions Architect @Databricks
    Inscrit en
    Septembre 2008
    Messages
    8 454
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Sr. Specialist Solutions Architect @Databricks
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 454
    Par défaut
    Euh non, c'est juste pour récupérer la variable qui a posé problème.
    Il faut faire celà avant sous SQL*Plus :

  7. #7
    Nouveau membre du Club
    Inscrit en
    Janvier 2010
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Janvier 2010
    Messages : 8
    Par défaut
    La valeur recupérée de vseq est: 1
    qd je récupère la valeur de c: il n'affiche rien !!!!

  8. #8
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Sr. Specialist Solutions Architect @Databricks
    Inscrit en
    Septembre 2008
    Messages
    8 454
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Sr. Specialist Solutions Architect @Databricks
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 454
    Par défaut
    Bizarre...
    Que donne ce code-ci dans votre procédure ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT to_number(code_sequence,'99999999') + 1 INTO c FROM sequentiel;
    D'ailleurs combien de ligne y a t'il dans la table sequentiel ?
    S'il y en a plus d'une il faut faire un curseur.

  9. #9
    Nouveau membre du Club
    Inscrit en
    Janvier 2010
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Janvier 2010
    Messages : 8
    Par défaut
    J'ai essayé le bout de code tjrs le meme pb, il n'affiche rien
    Quant à la table sequentiel, j'ai une seule ligne
    Dc ps besoin d'un curseur!!!

  10. #10
    Nouveau membre du Club
    Inscrit en
    Janvier 2010
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Janvier 2010
    Messages : 8
    Par défaut
    la valeur de vseq est plutot $1 à la place de 1.

  11. #11
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Sr. Specialist Solutions Architect @Databricks
    Inscrit en
    Septembre 2008
    Messages
    8 454
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Sr. Specialist Solutions Architect @Databricks
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 454
    Par défaut
    Le dollar est un bug ou est-ce lié à une information monétaire ?

  12. #12
    Nouveau membre du Club
    Inscrit en
    Janvier 2010
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Janvier 2010
    Messages : 8
    Par défaut
    Apparement c'est un bug

  13. #13
    Nouveau membre du Club
    Inscrit en
    Janvier 2010
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Janvier 2010
    Messages : 8
    Par défaut
    Qd j'ai enlevé le format de la fonction to_number, et j'ai changé la type de la colonne séquentiel, ca a marché.
    c := TO_NUMBER(vseq) + 1;
    c me retourne la valeur 1, mé moi je veux 1 sous ce format 00001
    qd j'applique le format comme suit
    c := TO_NUMBER(vseq,'99999') + 1; ca plante

    est ce que qlq pourrait m'éclaircir

  14. #14
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Sr. Specialist Solutions Architect @Databricks
    Inscrit en
    Septembre 2008
    Messages
    8 454
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Sr. Specialist Solutions Architect @Databricks
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 454
    Par défaut
    Vous vous emmelez les pinceaux dans les types de données.

    1 est un nombre.
    00001 est une chaîne de caractère :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select to_char(1, '00000') from dual

  15. #15
    Membre Expert Avatar de Garuda
    Homme Profil pro
    Chef de projet / Urbaniste SI
    Inscrit en
    Juin 2007
    Messages
    1 285
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Chef de projet / Urbaniste SI
    Secteur : Bâtiment

    Informations forums :
    Inscription : Juin 2007
    Messages : 1 285
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    DECLARE
      c VARCHAR2(64)
      vseq VARCHAR2(20);
    BEGIN
      SELECT code_sequence INTO vseq FROM sequentiel;
      c:=to_char(to_number(vseq)+1,'000000');
    END;

Discussions similaires

  1. Conversion vers un nombre avec to_number
    Par manas dans le forum SQL
    Réponses: 2
    Dernier message: 20/07/2010, 15h25
  2. Comparaison de champs avec TO_NUMBER
    Par sat83 dans le forum SQL
    Réponses: 11
    Dernier message: 31/03/2010, 08h33
  3. Probleme avec la fonction:TO_NUMBER
    Par agdid04 dans le forum Débuter
    Réponses: 4
    Dernier message: 13/03/2008, 14h31
  4. problème avec to_number
    Par midotoon dans le forum SQL
    Réponses: 2
    Dernier message: 19/06/2007, 09h27
  5. probleme avec to_number sous access
    Par lassmust dans le forum Access
    Réponses: 1
    Dernier message: 01/12/2005, 14h18

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