ORACLE - "Zéro" en préfixe dans une table

Résolu
Bonjour,

J'ai actuellement une table numérique partiellement renseignée:

1- Comment est-il possible de rajouter des "zéro" devant le nombre existant, sachant que celui-ci doit être limité à 4 caractéres ?
exemples:
Pour 23, je souhaiterai 0023;
pour 125, je souhaiterai 0125.

2 - Lors de la création de la table, quel doit être le paramètrage à effectuer pour arriver à ce résultat.

Merci pour votre aide...

5 réponses

  1. Il est possible de préfixer la représentation d'un nombre avec des '0' de la manière suivante :
    supposons qu'on a une table COMMUNE avec un champ CODE_INSEE de type number :

    LPAD(cast(CODE_INSEE as varchar2(5 BYTE)),5,'0')

    renverra '01034' pour la commune ayant un code insee à 1034 (Belley, dans l'Ain)

    Pour les codes insee tenant sur 5 caractères, cette fonction n'ajoutera aucun 0.
    2
    1. Bonjour,

      A tu essayé de renseigné le champ int en mettant 4 apres (pour dire que le int doit contenir 4 chiffre).

      Sinon remplace le type par un varchar4
      0
      1. Voici ce que j'ai actuellement,

        Nom : COPOLE
        Type de données : NUMBER
        Taille : 4

        si je change NUMBER en VARCHAR, il me dit :

        " ORA-01439 : une colonne doit être vide pour pouvoir modifier son type de données".

        Donc, visiblement je ne peux pas changer en cours de route le paramètrage !!

        (Pour la bretagne, je suis bien d'accord!!!)
        0
        1. Dans ce cas si ta table n'est pas trop grande et pas trop rempli, tu peut la recréer et la reremplir, mais avec le bon type pour la colonne qui t'interresse.
          0
      2. C'est ce que je craignais....!!

        Bien, en tout cas merci pour votre aide,
        je n'ai plus qu'à me mettre au travail...
        0
        1. Hello,

          une solution parmi d'autres :

          cette valeur doit être stockée dans la base sous ce format ?
          Si non alors uniquement à l'affichage :

          SELECT TO_CHAR(COPOLE,'0000') FROM dual; ----> 0125

          Effectivement on ne peut pas changer le type d'une colonne si celle ci est renseignée.

          Solution

          1- Renommer la colonne COPOLE en A_SUPP
          Supprimer l'index si colonne est indéxée.

          ALTER TABLE table_name RENAME COLUMN copole TO a_supp;

          2- création d'une nouvelle colonne COPOLE de type VARCHAR2

          ALTER TABLE table_name ADD (copole VARCHAR2(4));

          3- update de cette colonne avec transformation

          UPDATE table_name set COPOLE=TO_CHAR(a_supp,'0000')

          4 - Suppression de la colonne A_SUPP

          5- Ré indexation de la colonne COPOLE

          DROE

          http://www.dba-ora.fr/article-function-sql-oracle-to_char-70874668.html
          0