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 :

Création d'une vue


Sujet :

SQL Oracle

  1. #1
    Membre à l'essai
    Inscrit en
    Septembre 2005
    Messages
    25
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 25
    Points : 13
    Points
    13
    Par défaut Création d'une vue
    Bonjour,

    Je voudrais créer une vue dont un champs calculé soit définie de type number(11,2) et non number.

    Voici un petit exemple :

    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> create table test1 ( 
      2   col1 number(11,2),
      3   col2 number (11,2)
      4  )
      5  /
     
    Table créée.
     
    SQL> create or replace view vtest1 as select
      2   col1,
      3   col2,
      4   col1 + col2 as "res"
      5  from test1
      6  /
     
    Vue créée.
     
    SQL> desc vtest1
     Nom                                       NULL ?   Type
     ----------------------------------------- -------- ----------------------------
     COL1                                               NUMBER(11,2)
     COL2                                               NUMBER(11,2)
     res                                                NUMBER
    J'ai déjà essayer la focntion CAST mais ça ne donne rien du tout.
    Est-ce que quelqu'un a une idée ?

    Merci

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

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15 967
    Points : 19 073
    Points
    19 073
    Par défaut
    je ne comprends pas l'intérêt

    c'est pas ROUND(col1+col2) que tu cherches plutôt ?

  3. #3
    Membre à l'essai
    Inscrit en
    Septembre 2005
    Messages
    25
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 25
    Points : 13
    Points
    13
    Par défaut
    Citation Envoyé par orafrance Voir le message
    je ne comprends pas l'intérêt

    c'est pas ROUND(col1+col2) que tu cherches plutôt ?
    Non c'est juste un exemple. Je constate seulement que dès que l'on fait des opérations de calcul dans une vue, Oracle transforme le type du champs en Number. Mois je voudrais qu'il garde le type avec la précision donnée.

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

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15 967
    Points : 19 073
    Points
    19 073
    Par défaut
    c'est pas possible, dés lors que tu fais une opération Oracle ne peut pas choisir pour toi. Si tu fait un ROUND tu forceras l'affichage sur le format souhaité mais ça ne changera pas le type (ce qui n'a pas grand intérêt d'ailleurs).

  5. #5
    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
    Oracle9i Enterprise Edition Release 9.2.0.5.0 - 64bit Production JServer Release 9.2.0.5.0 - Production
    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
     
    create or replace view v_emp as
    select empno, ename,job,mgr,hiredate,sal,Cast(sal + Nvl(comm,0) As Number(7,2))  TotSal,deptno
    from scott.emp
     
    SQL> desc v_emp
     Nom                                       NULL ?   Type
     ----------------------------------------- -------- ----------------------------
     EMPNO                                     NOT NULL NUMBER(4)
     ENAME                                     NOT NULL VARCHAR2(10)
     JOB                                       NOT NULL VARCHAR2(9)
     MGR                                                NUMBER(4)
     HIREDATE                                  NOT NULL DATE
     SAL                                       NOT NULL NUMBER(7,2)
     TOTSAL                                             NUMBER(7,2)
     DEPTNO                                             NUMBER(2)

  6. #6
    Membre à l'essai
    Inscrit en
    Septembre 2005
    Messages
    25
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 25
    Points : 13
    Points
    13
    Par défaut
    Je vient de tester cette exemple en 8.1.7 et ça ne fonctionne pas.
    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
     
    SQL> create table test1 ( 
      2   col1 number(11,2),
      3   col2 number (11,2)
      4  )
      5  /
     
    Table créée.
     
    SQL> create or replace view vtest1 as
      2  SELECT col1, col2, Cast(col1 + Nvl(col2,0) AS Number(11,2))  res
      3  FROM test1
      4  /
     
    Vue créée.
     
    SQL> desc vtest1
     Nom                                       NULL ?   Type
     ----------------------------------------- -------- ----------------------------
     COL1                                               NUMBER(11,2)
     COL2                                               NUMBER(11,2)
     RES                                                NUMBER
     
    SQL>
    Quelqu'un a-t-il une autre idée ?

  7. #7
    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 maciej.bednarski Voir le message
    Je vient de tester cette exemple en 8.1.7 et ça ne fonctionne pas.
    ...
    Voila pour quoi on demande toujours de préciser le numéro de version d'Oracle.
    Citation Envoyé par maciej.bednarski Voir le message
    ...
    Quelqu'un a-t-il une autre idée ?
    Peut être une vue matérialisée. Mais peut tu préciser ton besoin ?

  8. #8
    Membre à l'essai
    Inscrit en
    Septembre 2005
    Messages
    25
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 25
    Points : 13
    Points
    13
    Par défaut
    Voilà mon problème, en récupérant la vue dans un longage de programmation style C++ Builder ou Delphi, je ne peux pas formater un champ numérique qui n'as pas de precision. Un NUMBER(11,2) a comme précision 2 or un NUMBER n'en n'as pas.

    Du coup je suis obligé de faire un peux de gymnastique pour afficher les données d'une vue oracle 8.1.7 dans un format souhaité.

  9. #9
    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
    Dans ce cas tu peut considère que un number c’est un double.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    alter table test1 
    add col3 number
    /
     
     Name                                      Null?    Type
    -------------------------------- -------- ----------------------------
     COL1                                               NUMBER(11,2)
     COL2                                               NUMBER(11,2)
     COL3                                               NUMBER

  10. #10
    Membre à l'essai
    Inscrit en
    Septembre 2005
    Messages
    25
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 25
    Points : 13
    Points
    13
    Par défaut
    C'est ce que j'ai fait dans mon code. Mais si tu veux on ne peux plus afficher le résultat d'une vue de manière générique, a chaque fois que je créer une vue oracle je suis obligé de modifier le source de mon programme, alors si ma vue me donnait le bon format de colonne j'aurais pas de problème.

    En tout cas je penses qu'en 8.1.7 ce n'est pas possible

  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
    Déclarer une colonne en number(11,2) c’est une indication donnée à la base concernant les vérification à faire sur les valeurs manipulée par la colonne. Elle n’est pas une indication de formatage de la valeur.
    Du ce point de vue ce qui se passe avec la vue est correcte : qui peut prédire le format des valeurs sur des champs calculée ?

    Voilà quelque chose qui fait mal y compris en Oracle 9
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    create or replace view v_emp as
    select empno, ename,job,mgr,hiredate,sal,Cast(sal + Nvl(comm,0) As Number(2))  TotSal,deptno
    from scott.emp
     
    SQL> select totsal from v_emp;
    select totsal from v_emp
                           *
    ERREUR à la ligne 1 :
    ORA-01438: valeur incohérente avec la précision indiquée pour cette colonne

  12. #12
    Membre à l'essai
    Inscrit en
    Septembre 2005
    Messages
    25
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 25
    Points : 13
    Points
    13
    Par défaut
    Je suis d'accord avec toi, mais c'est à la création de la vue que l'on doit faire attention. Tout ce calcul.
    Voilà je penses que l'on a tout dit

Discussions similaires

  1. création d'une vue ...help
    Par menoce dans le forum Langage SQL
    Réponses: 3
    Dernier message: 06/07/2005, 21h30
  2. Réponses: 26
    Dernier message: 27/04/2005, 11h29
  3. Création d'une vue
    Par Xris dans le forum Langage SQL
    Réponses: 6
    Dernier message: 29/01/2005, 16h30
  4. Réponses: 7
    Dernier message: 12/07/2004, 22h30
  5. [Plugin] Création d'une vue dynamiquement
    Par The Bonze dans le forum Eclipse Platform
    Réponses: 2
    Dernier message: 15/06/2004, 13h23

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