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

PL/SQL Oracle Discussion :

Lpad qui ne fonctionne pas [10g]


Sujet :

PL/SQL Oracle

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    209
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 209
    Points : 95
    Points
    95
    Par défaut Lpad qui ne fonctionne pas
    Bonjour,

    J'essaye d'utiliser la fonction lpad dans le curseur d'une procédure PL/SQL et cela ne semble pas fonctionner. Et pourtant elle est construite de façon simple:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    curseur c1 i
    select lpad(champ_numerique,8,'0')
    from table;
     
    var_num varchar2(8);
    Malgré cela si le champ est égal à 144 il ne me retourne pas ce dont j'attends, à savoir '00000144'. Idem sous SQL*PLUS. J'ai essayé de rajouter to_char mais rien n'y fait.

    D'avance merci.

    Thomas

  2. #2
    Expert confirmé
    Profil pro
    Inscrit en
    Août 2008
    Messages
    2 947
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 2 947
    Points : 5 846
    Points
    5 846
    Par défaut
    Peut on avoir un exemple complet copié/collé de sqlplus, comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    SQL> SELECT lpad(143,8,'0') from dual;
     
    LPAD(143
    --------
    00000143
     
    SQL>

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    209
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 209
    Points : 95
    Points
    95
    Par défaut
    ça marche quand ça veut car tout à l'heure ça ne fonctionnait pas;


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
      1  SELECT lpad(num,8,'0')
      2  FROM t_id
      3* WHERE tbname='RESERVATAIRE'
    SQL> /
     
    LPAD(NUM
    --------
    00000277


    En tous les cas, le problème reste entier sous PL/SQL

  4. #4
    Expert confirmé
    Profil pro
    Inscrit en
    Août 2008
    Messages
    2 947
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 2 947
    Points : 5 846
    Points
    5 846
    Par défaut
    Comme précédemment, il faut être précis et fournir des exemples reproductibles :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    SQL> declare
      2    l_num number := 143;
      3  begin
      4    dbms_output.put_line(lpad(l_num,8,'0'));
      5  end;
      6  /
    00000143
     
    PL/SQL procedure successfully completed.
     
    SQL>

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    209
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 209
    Points : 95
    Points
    95
    Par défaut
    Merci, j'ai testé cet exemple mais ça me retourne une valeur nulle (procedure successfully completed).

  6. #6
    Expert confirmé
    Profil pro
    Inscrit en
    Août 2008
    Messages
    2 947
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 2 947
    Points : 5 846
    Points
    5 846
    Par défaut
    Il faut activer l'affichage dans sqlplus avec :

  7. #7
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    209
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 209
    Points : 95
    Points
    95
    Par défaut
    Citation Envoyé par skuatamad Voir le message
    Il faut activer l'affichage dans sqlplus avec :
    Ok c'est bon et ça me retourne bien '00000143'

    J'oublie de préciser que mon curseur est ouverte de la façon suivante dans une boucle For:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    open c2;
    fetch c2 into var_num;
    Suivit d'une insertion dans la table avec la valeur var_num.

  8. #8
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    209
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 209
    Points : 95
    Points
    95
    Par défaut
    Bonjour,

    J'oubliais de préciser que le curseur s'appelle bien c2 et non c1 comme indiqué par erreur sur mon 1er post.

    Thomas

  9. #9
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    209
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 209
    Points : 95
    Points
    95
    Par défaut
    Bonjour,

    Je me permets de relancer le sujet car en effet, dans la procédure PL/SQL, j'ai toujours 143 au lieu de 0000143.

    Si quelqu'un a une idée, d'avance merci.

    Thomas

  10. #10
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    209
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 209
    Points : 95
    Points
    95
    Par défaut
    Bonjour,

    Il semblerait que mon problème soit résolu. En effet, j'ai corrigé ma requête comme ci-dessous avec un to_char:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select to_char(lpad(num+1,8,'0'))
    et ça marche

  11. #11
    Expert éminent sénior 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
    Points : 11 252
    Points
    11 252
    Par défaut
    Citation Envoyé par Thomf Voir le message
    ... En effet, j'ai corrigé ma requête comme ci-dessous avec un to_char:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select to_char(lpad(num+1,8,'0'))
    et ça marche
    N'importe quoi!
    The string returned is of VARCHAR2 data type if expr1 is a character data type, NVARCHAR2 if expr1 is a national character data type, and a LOB if expr1 is a LOB data type
    Autrement dit le résultat de la fonction LPAD est déjà une chaîne des caractères.

  12. #12
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    209
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 209
    Points : 95
    Points
    95
    Par défaut
    Citation Envoyé par mnitu Voir le message
    N'importe quoi!

    Autrement dit le résultat de la fonction LPAD est déjà une chaîne des caractères.
    Oui ça peut paraitre n'importe quoi et effectivement la fonction LPAD est déjà dans une chaine de caractères mais comme ça ne marchait pas, j'ai forcé et ça a résolu mon problème. Bon avant de critiquer, merci de voir les exemples que j'ai cité qui sont bien la raison pour laquelle j'ai posté dans ce forum !

  13. #13
    Expert éminent sénior 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
    Points : 11 252
    Points
    11 252
    Par défaut
    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
     
    Connected to Oracle Database 10g Enterprise Edition Release 10.2.0.4.0 
    Connected as mni
     
    SQL> 
    SQL> Select 'char', to_char('char'),
      2         dump('char') d1,
      3         dump(to_char('char')) d2
      4    from dual
      5  /
     
    'CHAR' TO_CHAR('CHAR') D1                          D2
    ------ --------------- --------------------------- --------------------------------------------------------------------------------
    char   char            Typ=96 Len=4: 99,104,97,114 Typ=96 Len=4: 99,104,97,114
     
    SQL>
    Comme vous pouvez le constater ça marche mais c’est du n’importe quoi.

  14. #14
    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 : 49
    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
    Citation Envoyé par Thomf Voir le message
    Bon avant de critiquer, merci de voir les exemples que j'ai cité qui sont bien la raison pour laquelle j'ai posté dans ce forum !
    Vous n'avez posté aucun exemple complet. A mon avis vous avez un problème de typage et de conversion implicite :

    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
    SQL> set serveroutput on
    SQL> declare
      2   var_num varchar2(8);
      3  begin
      4   select lpad(144,8,'0') into var_num from dual ;
      5   dbms_output.put_line( var_num );
      6  end;
      7  /
     
    00000144
     
    Procédure PL/SQL terminée avec succès.
     
    SQL> declare
      2   var_num number;
      3  begin
      4   select lpad(144,8,'0') into var_num from dual ;
      5   dbms_output.put_line( var_num );
      6* end;
    SQL> /
    144
     
    Procédure PL/SQL terminée avec succès.

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

Discussions similaires

  1. Code qui ne fonctionne pas sur Mac
    Par malbaladejo dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 14/01/2005, 11h08
  2. [SQL] Requête à jointure qui ne fonctionne pas
    Par Bensor dans le forum Langage SQL
    Réponses: 2
    Dernier message: 09/12/2004, 16h10
  3. Jointure externe qui ne fonctionne pas
    Par Guizz dans le forum Langage SQL
    Réponses: 3
    Dernier message: 05/02/2004, 12h26
  4. CREATEFILEMAPPING qui ne fonctionne pas???
    Par Jasmine dans le forum MFC
    Réponses: 2
    Dernier message: 06/01/2004, 19h33
  5. UNION qui ne fonctionne pas
    Par r-zo dans le forum Langage SQL
    Réponses: 7
    Dernier message: 21/07/2003, 10h04

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