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 ?
Version imprimable
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:
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 essien :sm:Citation:
Envoyé 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:
1
2 create or replace view v as select * from t;
je viens de faire ce test :
SQL> show release
release 902000600
cette fois si je refais le même test je je ne vais pas ecrir "select * from toto" mais "select toto.* from toto"
SQL> create or replace view toto as select toto.* from toto;
si consulte la vue avec toad je retrouve "select toto.* from toto"
je me demande s'il sagit d'un paramètre dans v$parameters ou c'est une difference entre 9i et 10g et que 10g met automatiquement les noms de colonnes ?
il s'agit d'un bug, fixé un 9.2.0.7
si tu ajoutes une colonne, alors ta vue sera invalide
Bug 3040464 - Views defined as selecting ALIAS.* should be expanded
Merci à tous pour votre aide assez précieuse ;)