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 ?
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 ?
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.
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 ?
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 :
J'espére que cela t'aura un minimum éclairé
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
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 ?
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
il s'agit bien sûr là d'une paresse à mauvais essienEnvoyé par Oraman
![]()
Si vraiment tu tiens à employer un * dans ta vue, tu peux toujours faire comme Jaouad l'a mention
à chaque modification de la table... Une table dont le nombre de colonne est très dynamique me parait une erreur de design, non?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 create or replace view v as select * from t;
Partager