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 :

[10g]creation vue


Sujet :

Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Août 2006
    Messages
    181
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 181
    Par défaut [10g]creation vue
    dans oracle 10g quand on vuex créer une nouvelle vue :
    select * from toto
    aprés la création de la vue je trouve les noms de colonne à la places de '*'
    donc la vue devient : select col1,col2... from toto
    comment on peut eviter cela ?

  2. #2
    Membre Expert

    Profil pro
    Inscrit en
    Février 2006
    Messages
    3 437
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 3 437
    Par défaut
    Je crois que c'est tout à fait normal et qu'on ne peut pas changer ce comportement. C'est un des raisons pour laquelle il est recommandé de toujours définir explicitement la liste des colonnes de la vue: les nouvelles colonnes ne sont pas prises en compte automatiquement et le code utilisant le vue reste compatible.

  3. #3
    Membre confirmé
    Inscrit en
    Août 2006
    Messages
    181
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 181
    Par défaut
    Merci pour votre réponse.
    le problème c'est quand on rajoute des nouvelles colonnes dans la table toto on doit alors réecrir le coprs de la vue et ne pas juste la rébuilder. c'est ça mon problème c'est que je ne veux pas a chaque fois réecrir de nouveau la vue surtout que la table toto est trés dynamique. y a-t-il une meilleur solution ?

  4. #4
    Rédacteur

    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    2 320
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 320
    Par défaut
    Bonjour ,
    Une vue simple est une vue qui n'a pas de consistance physique, seul la requête de définition est stocké dans le tablespace System et celle ci est executé à chaque appel.

    On peut retrouver les vues d'une base de données dans les vues systémes DBA_VIEWS et ces pendant ALL et USER.

    Donc une vue est plus ou moins un ordre SQL stocké en dur dans la base. Lorsque tu modifie ta table source forcément si tu souhaites que cela soit répercuté dans ta vue, il va falloir effectué une redefinition de celle ci.


    Cepedant, normalement les changement de structure d'une table ne devraient pas se faire aussi souvent :

    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
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    SQL> show release 
    release 902000600
    SQL> create table dvp ( a number ) ; 
     
    Table créée.
     
    SQL> insert into dvp values (1) ; 
     
    1 ligne créée.
     
    SQL> r
      1* insert into dvp values (1)
     
    1 ligne créée.
     
    SQL> r
      1* insert into dvp values (1)
     
    1 ligne créée.
     
    SQL> r
      1* insert into dvp values (1)
     
    1 ligne créée.
     
    SQL> commit ;
     
    Validation effectuée.
     
    SQL> select * from dvp ; 
     
             A
    ----------
             1
             1
             1
             1
     
    SQL> create view dvp_view as select * from dvp ; 
     
    Vue créée.
     
    SQL> select * from  dvp_view ;
     
             A
    ----------
             1
             1
             1
             1
     
     
    SQL> alter table dvp add  ( b varchar2(10) ) ;
     
    Table modifiée.
     
    SQL> update dvp set b = 'DVP' ;
     
    4 ligne(s) mise(s) à jour.
     
    SQL> commit ;
     
    Validation effectuée.
     
    SQL> select * from dvp  ; 
     
             A B
    ---------- ----------
             1 DVP
             1 DVP
             1 DVP
             1 DVP
     
    SQL> select * from dvp_view ;
     
             A
    ----------
             1
             1
             1
             1
     
     
    SQL>  create or replace view dvp_view as select * from dvp ; 
     
    Vue créée.
     
    SQL> select * from dvp_view ;
     
             A B
    ---------- ----------
             1 DVP
             1 DVP
             1 DVP
             1 DVP
    J'espére que cela t'aura un minimum éclairé

  5. #5
    Membre confirmé
    Inscrit en
    Août 2006
    Messages
    181
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 181
    Par défaut
    Merci encore une fois pour vous etre interessez à mon pb.
    voici le test que je viens de faire:

    SQL> show release
    release 1002000100
    SQL> create table toto(c1 number(2),c2 number(3));

    Table created.

    SQL> create or replace view vtoto as select * from toto;

    View created.

    maintenant quand je consulte la vue en utilsant toad je trouve :

    CREATE OR REPLACE VIEW VTOTO
    AS
    select "C1","C2" from toto;

    => je ne trouve pas "select * from toto"
    c'est ça mon but c'est de pouvoir retrouver "select * from toto" dans la subquery de la vue ?

  6. #6
    Rédacteur

    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    2 320
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 320
    Par défaut
    C'est impossible , même si tu fait un select * oracle va remplacer le * par la liste des colonnes.

    Tu ne peux pas trouver un select * pour une vue , car oracle le remplace systématiquement pour pouvoir construire les colonnes de la vue

  7. #7
    Expert confirmé
    Avatar de laurentschneider
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Décembre 2005
    Messages
    2 944
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2005
    Messages : 2 944
    Par défaut
    Citation Envoyé par Oraman
    mon problème c'est que je ne veux pas a chaque fois réecrir de nouveau la vue surtout que la table toto est trés dynamique
    il s'agit bien sûr là d'une paresse à mauvais essien

    Si vraiment tu tiens à employer un * dans ta vue, tu peux toujours faire comme Jaouad l'a mention

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    create or replace view  v as select * from t;
    à chaque modification de la table... Une table dont le nombre de colonne est très dynamique me parait une erreur de design, non?

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

Discussions similaires

  1. [10g] Plusieurs vues en une
    Par lenoil dans le forum SQL
    Réponses: 1
    Dernier message: 06/10/2009, 14h15
  2. [Oracle 10g]Creation de Tablespace
    Par peuplier dans le forum Administration
    Réponses: 6
    Dernier message: 24/02/2009, 20h00
  3. [oracle 10g] creation d'une table
    Par pepsister dans le forum Administration
    Réponses: 5
    Dernier message: 06/11/2006, 23h01
  4. Réponses: 6
    Dernier message: 19/10/2006, 16h16
  5. creation vue sur une periode
    Par LHERMITTE dans le forum Oracle
    Réponses: 2
    Dernier message: 30/03/2006, 11h46

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