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

Administration Oracle Discussion :

Forcer la décimale


Sujet :

Administration Oracle

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2011
    Messages
    41
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2011
    Messages : 41
    Points : 24
    Points
    24
    Par défaut Forcer la décimale
    Bonjour à tous,

    Je souhaitais savoir comment on pouvait forcer la décimale sous Oracle.
    J'ai des valeurs rentrées dans un fichier plat (ex:55.00) et oracle m'insère 55 dans mes tables.

    J'utilise la fonction to_number() mais je ne sais pas comment préciser le "forcage" des chiffres décimaux.

    Merci,
    NarbO

  2. #2
    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
    C'est une question d'affichage pas de stockage de données.

    Si dans votre select vous utilisez to_char(col,'9999999D99') et non to_number, deux décimales vont s'afficher.

    http://download.oracle.com/docs/cd/B...nctions181.htm

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2011
    Messages
    41
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2011
    Messages : 41
    Points : 24
    Points
    24
    Par défaut
    Oui je suis bien d'accord concernant l'affichage.
    Par contre, que ce soit char ou number rien ne change, et j'ai essayé bcp de fmt différent (9999999.99 // 9999999.009 // FM9999999.99 // FM99999999.009...)

    D'ailleurs même quand j'ai un chiffre composé de la sorte 55.50 dans mon fichier plat à l'affichage il va ressembler à ça 55.5

    En gros, il écourte au maximum les décimales..

    J'ai aussi essayé de modifier les NLS_TERRITORY et LANGUAGE à France et French mais ça ne change rien quant à l'affichage.

  4. #4
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Customer Success Manager @Vertica
    Inscrit en
    Septembre 2008
    Messages
    8 452
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Customer Success Manager @Vertica
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 452
    Points : 17 820
    Points
    17 820
    Par défaut
    Avec la fonction "réciproque" de to_number : to_char.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    select to_char(55.00, '99D00', 'nls_numeric_characters=''.,''') as affichage
      from dual;
     
    AFFICHAGE  
    ---------
        55.00

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2011
    Messages
    41
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2011
    Messages : 41
    Points : 24
    Points
    24
    Par défaut
    Oui ça marche avec un select classique, mais je m'en sers dans mon ctl de cette fonction, et derrière à l'affichage si je fais un select * from matable je ne vois pas les décimales.

  6. #6
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Customer Success Manager @Vertica
    Inscrit en
    Septembre 2008
    Messages
    8 452
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Customer Success Manager @Vertica
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 452
    Points : 17 820
    Points
    17 820
    Par défaut
    Vous n'avez pas compris le principe.

    Vous recevez un fichier texte qui ne contient que des char.
    Quand vous insérez vos données dans votre table, il faut convertir les chaînes qui vous intéressent en nombre.
    Donc dans votre fichier CTL, c'est bien la fonction to_number que vous devez utiliser.

    Une fois que votre donnée est dans votre table, elle est stockée dans un format numérique.
    Lorsque vous faites de l'affichage, ce nombre est converti en chaîne de caractères.
    Vous pouvez alors forcer un affichage particulier à partir de votre nombre --> fonction to_char.

  7. #7
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2011
    Messages
    41
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2011
    Messages : 41
    Points : 24
    Points
    24
    Par défaut
    Donc, comment gérer l'insertion de données de type date si elles ne sont pas tout le temps renseignées ?

    exemple :

    Code csv : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    010130;MIRIBEL LES ECHETS AM;Dec 31 2004 12:00AM;;342010;037;0
    010150;BOURG EN BRESSE ATM;;752800;540750;039;0
    010230;CHATILLON BELLEGARDE PPDC;;011790;381830;034;0
    010250;BELLEY PPDC;;011790;381830;034;0
    010265;BAGE LE CHATEL EAR GP;;731770;693910;038;0
    010270;CEYZERIAT CC-T1;Feb 16 2009 12:00AM;011790;381830;034;0

  8. #8
    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
    1°) Créer une table externe qui pointe sur votre fichier CSV ( http://www.orafaq.com/node/848 )
    2°) Insérer les données à partir de cette table

    => aucune conversion, les nulls sont gérés

    Exemple :

    1°) donner les droits qui vont bien à l'utilisateur qui doit utiliser la table externe (dans notre cas : toto)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    connect / as sysdba
     
    create or replace directory xtern_data_dir
    as '/home/oracle/load'
    /
     
    grant read,write on directory xtern_data_dir to toto
    /
     
    connect toto/toto
    On crée le fichier fic.csv

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    010130;MIRIBEL LES ECHETS AM;Dec 31 2004 12:00AM;;342010;037;0
    010150;BOURG EN BRESSE ATM;;752800;540750;039;0
    010230;CHATILLON BELLEGARDE PPDC;;011790;381830;034;0
    010250;BELLEY PPDC;;011790;381830;034;0
    010265;BAGE LE CHATEL EAR GP;;731770;693910;038;0
    010270;CEYZERIAT CC-T1;Feb 16 2009 12:00AM;011790;381830;034;0
    Définition de la table externe

    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
    create table xtern_table
         ( ID_VILLE varchar2(6),
           VILLE    varchar2(50),
           DATE_QVB date,
           CODE1 number(8,2),
           CODE2 number(8,2),
           CODE3 number(5),
           CODE4 number(2,1)	   
         )
         organization external
         ( default directory xtern_data_dir
           access parameters
           ( records delimited by newline
             fields terminated by ';' 
    		        ( ID_VILLE char(6),
                      VILLE    char(50),
                      DATE_QVB char(19) date_format DATE mask "Mon DD YYYY HH:MIAM",
                      CODE1 char(8),
                      CODE2 char(8),
                      CODE3 char(4),
                      CODE4 char(1)
                    ) 
           )
           location ('fic.csv')  
       )
     /
    Interrrogation de cette table externe

    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
    39
    40
    41
    set lines 155
    select * from xtern_table
    /
     
     
    ID_VIL VILLE                                              DATE_QVB       CODE1      CODE2      CODE3      CODE4
    ------ -------------------------------------------------- --------- ---------- ---------- ---------- ----------
    010130 MIRIBEL LES ECHETS AM                              31-DEC-04                342010         37          0
    010150 BOURG EN BRESSE ATM                                              752800     540750         39          0
    010230 CHATILLON BELLEGARDE PPDC                                         11790     381830         34          0
    010250 BELLEY PPDC                                                       11790     381830         34          0
    010265 BAGE LE CHATEL EAR GP                                            731770     693910         38          0
    010270 CEYZERIAT CC-T1                                    16-FEB-09      11790     381830         34          0
     
    6 rows selected.
     
    desc xtern_table
     Name                                                                                   Null?    Type
     -------------------------------------------------------------------------------------- -------- ----------------------------------------------------------
     ID_VILLE                                                                                        VARCHAR2(6)
     VILLE                                                                                           VARCHAR2(50)
     DATE_QVB                                                                                        DATE
     CODE1                                                                                           NUMBER(8,2)
     CODE2                                                                                           NUMBER(8,2)
     CODE3                                                                                           NUMBER(5)
     CODE4                                                                                           NUMBER(2,1)
     
    select ID_VILLE, VILLE, to_char(DATE_QVB,'DD/MM/YYYY HH24:MI') dte, code1, code2, to_char(code3,'099D00') code3, code4
    from xtern_table
    /
     
    ID_VIL VILLE                                              DTE                   CODE1      CODE2 CODE3        CODE4
    ------ -------------------------------------------------- ---------------- ---------- ---------- ------- ----------
    010130 MIRIBEL LES ECHETS AM                              31/12/2004 00:00                342010  037.00          0
    010150 BOURG EN BRESSE ATM                                                     752800     540750  039.00          0
    010230 CHATILLON BELLEGARDE PPDC                                                11790     381830  034.00          0
    010250 BELLEY PPDC                                                              11790     381830  034.00          0
    010265 BAGE LE CHATEL EAR GP                                                   731770     693910  038.00          0
    010270 CEYZERIAT CC-T1                                    16/02/2009 00:00      11790     381830  034.00          0
     
    6 rows selected.

  9. #9
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2011
    Messages
    41
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2011
    Messages : 41
    Points : 24
    Points
    24
    Par défaut
    Merci pour l'info je vais tester ça

  10. #10
    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
    Et donc pour ajouter des lignes dans une table titi crée sur le même modèle que notre table externe


    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
    SQL> create table titi as select * from xtern_table where 1=2
      2  /
     
    Table created.
     
    SQL> desc titi
     Name                                                                                   Null?    Type
     -------------------------------------------------------------------------------------- -------- ----------------------------------------------------------
     ID_VILLE                                                                                        VARCHAR2(6)
     VILLE                                                                                           VARCHAR2(50)
     DATE_QVB                                                                                        DATE
     CODE1                                                                                           NUMBER(8,2)
     CODE2                                                                                           NUMBER(8,2)
     CODE3                                                                                           NUMBER(5)
     CODE4                                                                                           NUMBER(2,1)
     
    SQL> insert /*+ append */ into titi select * from xtern_table
      2  /
     
    6 rows created.
     
    SQL> commit;
     
    Commit complete.
     
    SQL> select * from titi
      2  /
     
    ID_VIL VILLE                                              DATE_QVB       CODE1      CODE2      CODE3      CODE4
    ------ -------------------------------------------------- --------- ---------- ---------- ---------- ----------
    010130 MIRIBEL LES ECHETS AM                              31-DEC-04                342010         37          0
    010150 BOURG EN BRESSE ATM                                              752800     540750         39          0
    010230 CHATILLON BELLEGARDE PPDC                                         11790     381830         34          0
    010250 BELLEY PPDC                                                       11790     381830         34          0
    010265 BAGE LE CHATEL EAR GP                                            731770     693910         38          0
    010270 CEYZERIAT CC-T1                                    16-FEB-09      11790     381830         34          0
     
    6 rows selected.

Discussions similaires

  1. [WD15] Forcer le nombre à avoir une partie décimale
    Par lerorodu51 dans le forum WinDev
    Réponses: 8
    Dernier message: 18/08/2010, 17h32
  2. Forcer à 2 décimales un nombre entier
    Par Domino40 dans le forum VBA Word
    Réponses: 4
    Dernier message: 27/11/2008, 12h28
  3. Forcer les Doubles à deux décimales
    Par midotoon dans le forum Jasper
    Réponses: 2
    Dernier message: 17/10/2008, 11h46
  4. Vérifier/forcer le caractère de séparation décimal
    Par primax dans le forum Macros et VBA Excel
    Réponses: 12
    Dernier message: 26/09/2007, 14h01
  5. [VB.NET] Forcer l'affichage de deux décimales pour un nombre double.
    Par annedeblois dans le forum Windows Forms
    Réponses: 9
    Dernier message: 10/11/2006, 14h34

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