Précédent   Forum du club des développeurs et IT Pro > Bases de données > Oracle
Oracle Forum Oracle : le serveur, les outils, ... Voir F.A.Q Oracle Tutoriels Oracle
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse
 
Outils de la discussion
Publicité
'
Vieux 24/09/2006, 22h28   #1
Xo
Expert Confirmé
 
Avatar de Xo
 
Inscription : janvier 2005
Messages : 2 701
Détails du profil
Informations personnelles :
Âge : 39

Informations forums :
Inscription : janvier 2005
Messages : 2 701
Points : 3 929
Points : 3 929
Envoyer un message via Skype™ à Xo
Par défaut [FAQ] Vos contributions

Chers membres,

Comme vous vous en êtes sûrement rendu compte, la FAQ Oracle a récemment été mise à jour. Aujourd'hui, afin de continuer à vous proposer des ressources toujours plus exhaustives et variées, nous vous proposons de participer à l'élaboration de cette FAQ.

Pour contribuer, il vous suffit de poster vos propositions à la suite de ce fil de discussion (ou de me les envoyer par MP), au format suivant :
  • la Question
  • la Rubrique
  • les Mots Clés
  • La Réponse, détaillée et commentée (avec les mentions de n° de version, ie à partir de laquelle la réponse est applicable, etc.)
Elles seront ensuites testées et discutées en interne, avant d'être validées ou refusées. Les éventuels refus seront bien entendu justifiés (par MP) aux auteurs concernés.

N'hésitez pas non plus à me contacter pour toute question, suggestion, critique à propos de cette FAQ.

Merci de ne pas poser de questions en réponse à ce message, elles seront systématiquement déplacées.
__________________
"Ce que l'on conçoit bien s'énonce clairement,
Et les mots pour le dire arrivent aisément." Nicolas Boileau

"Expliquer empêche de comprendre si cela dispense de chercher"

Quiz Oracle : venez tester vos connaissances !

La FAQ Oracle : 138 réponses à vos questions
Aidez-nous à la compléter
Xo est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/07/2007, 11h00   #2
Magnus
Membre Expert
 
Inscription : avril 2005
Messages : 1 672
Détails du profil
Informations forums :
Inscription : avril 2005
Messages : 1 672
Points : 1 503
Points : 1 503
Par défaut Modification d'une séquence

Question : comment modifier la valeur d'une séquence ?
Rubrique : Développement
Mots clés : séquence
Réponse :
Pour mettre à jour la valeur courante d'une séquence, 2 techniques peuvent être utilisées :
- la supprimer et la recréer en prenant garde à la positionner à une valeur supérieure à la dernière valeur attribuée si elle est utilisée par une clé primaire
- modifier sa valeur d'incrémentation le temps d'une incrémentation

Remarque : attention aux effets de cache de la séquence !

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
DROP TABLE DVP;
CREATE TABLE DVP(
  NB NUMBER(12),
  TXT VARCHAR2(50)
);
 
DROP SEQUENCE S_DVP;
CREATE SEQUENCE S_DVP START WITH 1 INCREMENT BY 1 NOMINVALUE NOMAXVALUE NOCACHE;
 
DROP TRIGGER T_DVP;
CREATE TRIGGER T_DVP
BEFORE INSERT ON DVP
FOR EACH ROW
BEGIN
  SELECT S_DVP.NEXTVAL
  INTO   :NEW.NB
  FROM DUAL;
END;
/
 
INSERT INTO DVP (TXT) VALUES ('1ère insertion');
INSERT INTO DVP (TXT) VALUES ('2ème insertion');
 
SELECT S_DVP.CURRVAL
FROM   DUAL;
 
SELECT NB, TXT
FROM   DVP;
 
--------- 1ère technique ---------
 
DROP SEQUENCE S_DVP;
 
-- le trigger T_DPV n'est pas invalidé par l'instruction précédente
-- mais ne peut pas être utilisé
SELECT STATUS
FROM   DBA_TRIGGERS
WHERE  OWNER        = USER
AND    TRIGGER_NAME = 'T_DVP';
 
CREATE SEQUENCE S_DVP START WITH 501 INCREMENT BY 1 NOMINVALUE NOMAXVALUE NOCACHE;
 
INSERT INTO DVP (TXT) VALUES ('4ème insertion');
 
SELECT S_DVP.CURRVAL
FROM   DUAL;
 
SELECT NB, TXT
FROM   DVP;
 
 
--------- 2ème technique ---------
 
ALTER SEQUENCE S_DVP INCREMENT BY 200;
 
SELECT S_DVP.NEXTVAL
FROM   DUAL;
 
-- le trigger T_DPV n'est pas invalidé par l'instruction précédente
-- et il PEUT ETRE utilisé !!!!
SELECT STATUS
FROM   DBA_TRIGGERS
WHERE  OWNER        = USER
AND    TRIGGER_NAME = 'T_DVP';
 
ALTER SEQUENCE S_DVP INCREMENT BY 1;
 
INSERT INTO DVP (TXT) VALUES ('3ème insertion');
 
SELECT NB, TXT
FROM   DVP;
 
SELECT S_DVP.CURRVAL
FROM   DUAL;
 
SELECT NB, TXT
FROM   DVP;
 
-- le pas d'incrémentation est bien de 1 comme à l'origine
SELECT S_DVP.NEXTVAL
FROM   DUAL;
Exemple d'exécution :
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
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
10g CYRIL> DROP TABLE DVP;
 
TABLE supprimée.
 
10g CYRIL> CREATE TABLE DVP(
  2    NB NUMBER(12),
  3    TXT VARCHAR2(50)
  4  );
 
TABLE créée.
 
10g CYRIL> 
10g CYRIL> DROP SEQUENCE S_DVP;
 
Séquence supprimée.
 
10g CYRIL> CREATE SEQUENCE S_DVP START WITH 1 INCREMENT BY 1 NOMINVALUE NOMAXVALUE NOCACHE;
 
Séquence créée.
 
10g CYRIL> 
10g CYRIL> DROP TRIGGER T_DVP;
DROP TRIGGER T_DVP
*
ERREUR à la ligne 1 :
ORA-04080: déclencheur 'T_DVP' n'existe pas
 
 
10g CYRIL> CREATE TRIGGER T_DVP
  2  BEFORE INSERT ON DVP
  3  FOR EACH ROW
  4  BEGIN
  5    SELECT S_DVP.NEXTVAL
  6    INTO   :NEW.NB
  7    FROM DUAL;
  8  END;
  9  /
 
Déclencheur créé.
 
10g CYRIL> 
10g CYRIL> INSERT INTO DVP (TXT) VALUES ('1ère insertion');
 
1 ligne créée.
 
10g CYRIL> INSERT INTO DVP (TXT) VALUES ('2ème insertion');
 
1 ligne créée.
 
10g CYRIL> 
10g CYRIL> SELECT S_DVP.CURRVAL
  2  FROM   DUAL;
 
   CURRVAL
----------
         2
 
1 ligne sélectionnée.
 
10g CYRIL> 
10g CYRIL> SELECT NB, TXT
  2  FROM   DVP;
 
        NB TXT
---------- --------------------------------------------------
         1 1ère insertion
         2 2ème insertion
 
2 ligne(s) sélectionnée(s).
 
10g CYRIL> 
10g CYRIL> --------- 1ère technique ---------
10g CYRIL> 
10g CYRIL> DROP SEQUENCE S_DVP;
 
Séquence supprimée.
 
10g CYRIL> 
10g CYRIL> -- le trigger T_DPV n'est pas invalidé par l'instruction précédente
10g CYRIL> -- mais ne peut pas être utilisé
10g CYRIL> SELECT STATUS
  2  FROM   DBA_TRIGGERS
  3  WHERE  OWNER        = USER
  4  AND    TRIGGER_NAME = 'T_DVP';
 
STATUS
--------
ENABLED
 
1 ligne sélectionnée.
 
10g CYRIL> 
10g CYRIL> CREATE SEQUENCE S_DVP START WITH 501 INCREMENT BY 1 NOMINVALUE NOMAXVALUE NOCACHE;
 
Séquence créée.
 
10g CYRIL> 
10g CYRIL> INSERT INTO DVP (TXT) VALUES ('4ème insertion');
 
1 ligne créée.
 
10g CYRIL> 
10g CYRIL> SELECT S_DVP.CURRVAL
  2  FROM   DUAL;
 
   CURRVAL
----------
       501
 
1 ligne sélectionnée.
 
10g CYRIL> 
10g CYRIL> SELECT NB, TXT
  2  FROM   DVP;
 
        NB TXT
---------- --------------------------------------------------
         1 1ère insertion
         2 2ème insertion
       501 4ème insertion
 
3 ligne(s) sélectionnée(s).
 
10g CYRIL> 
10g CYRIL> 
10g CYRIL> --------- 2ème technique ---------
10g CYRIL> 
10g CYRIL> ALTER SEQUENCE S_DVP INCREMENT BY 200;
 
Séquence modifiée.
 
10g CYRIL> 
10g CYRIL> SELECT S_DVP.NEXTVAL
  2  FROM   DUAL;
 
   NEXTVAL
----------
       701
 
1 ligne sélectionnée.
 
10g CYRIL> 
10g CYRIL> -- le trigger T_DPV n'est pas invalidé par l'instruction précédente
10g CYRIL> -- et il PEUT ETRE utilisé !!!!
10g CYRIL> SELECT STATUS
  2  FROM   DBA_TRIGGERS
  3  WHERE  OWNER        = USER
  4  AND    TRIGGER_NAME = 'T_DVP';
 
STATUS
--------
ENABLED
 
1 ligne sélectionnée.
 
10g CYRIL> 
10g CYRIL> ALTER SEQUENCE S_DVP INCREMENT BY 1;
 
Séquence modifiée.
 
10g CYRIL> 
10g CYRIL> INSERT INTO DVP (TXT) VALUES ('3ème insertion');
 
1 ligne créée.
 
10g CYRIL> 
10g CYRIL> SELECT NB, TXT
  2  FROM   DVP;
 
        NB TXT
---------- --------------------------------------------------
         1 1ère insertion
         2 2ème insertion
       501 4ème insertion
       702 3ème insertion
 
4 ligne(s) sélectionnée(s).
 
10g CYRIL> 
10g CYRIL> SELECT S_DVP.CURRVAL
  2  FROM   DUAL;
 
   CURRVAL
----------
       702
 
1 ligne sélectionnée.
 
10g CYRIL> 
10g CYRIL> SELECT NB, TXT
  2  FROM   DVP;
 
        NB TXT
---------- --------------------------------------------------
         1 1ère insertion
         2 2ème insertion
       501 4ème insertion
       702 3ème insertion
 
4 ligne(s) sélectionnée(s).
 
10g CYRIL> 
10g CYRIL> -- le pas d'incrémentation est bien de 1 comme à l'origine
10g CYRIL> SELECT S_DVP.NEXTVAL
  2  FROM   DUAL;
 
   NEXTVAL
----------
       703
 
1 ligne sélectionnée.
Cette nouvelle entrée de la FAQ pourrait être référencée (symétriquement) avec celle-ci : http://oracle.developpez.com/faq/?pa...#autoincrement
__________________
Modérateur des forums Oracle et Langage SQL
Forum SQL : je n'interviens PAS plus de 4 fois dans une discussion car si c'est nécessaire cela prouve généralement que vous n'avez pas respecté : les règles du forum
Magnus est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/08/2008, 15h04   #3
billharry
Membre actif
 
Homme Guillaume HARRY
Ingénieur d'études
Inscription : avril 2007
Messages : 135
Détails du profil
Informations personnelles :
Nom : Homme Guillaume HARRY
Âge : 33
Localisation : France

Informations professionnelles :
Activité : Ingénieur d'études

Informations forums :
Inscription : avril 2007
Messages : 135
Points : 190
Points : 190
Par défaut Procédures spécifiques d'export/import

Bonjour,

Sous Unix et Linux, voici quelques procédures spécifiques d'export/import

1. Pour exporter et importer simultanément sans passer par un fichier dump

Code :
1
2
3
4
mkfifo fichier_pipe
imp connection ... file=fichier_pipe &
exp connection ... file=fichier_pipe
Tout ce qui est envoyé dans le fichier pipe par exp est immédiatement traité par imp

2. Pour exporter et compresser en même temps

Code :
1
2
3
4
mkfifo fichier_pipe
gzip < fichier_pipe > dump.dmp.gz &
exp connection ... file=fichier_pipe
Tout ce qui est envoyé dans le fichier pipe par exp est immédiatement traité par gzip, donc on se retrouve au final avec un fichier dump compresser

3. De même pour décompresser et importer en même temps

Code :
1
2
3
4
mkfifo fichier_pipe
gunzip <  dump.dmp.gz > fichier_pipe &
imp connection ... file=fichier_pipe
__________________
Guillaume HARRY
Expertise bases de données et Java/J2EE
billharry est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse
Outils de la discussion

Navigation rapide


Fuseau horaire GMT +2. Il est actuellement 13h03.


 
 
 
 
Partenaires

Hébergement Web