Précédent   Forum des professionnels en informatique > 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 Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 13/03/2007, 19h47   #1
Invité régulier
 
Inscription : janvier 2006
Messages : 32
Détails du profil
Informations forums :
Inscription : janvier 2006
Messages : 32
Points : 7
Points : 7
Par défaut [Débutant] Autoincrémentation sous Oracle

Bonjour, je pose une question qui doit pourtant être facile mais malgré mes essais, je ne comprends pas comment faire une auto-incrémentation sous Oracle

Voici ma table

Code :
1
2
3
4
5
6
7
8
(CREATE TABLE Exemplaire
	NumeroInventaire int,
	ISBN varchar(15),
	EtatEmprunte int DEFAULT(0),
	constraint PKExemplaire PRIMARY KEY(NumeroInventaire, ISBN),	
	constraint FKExemplaire FOREIGN KEY (ISBN) REFERENCES Livre(ISBN) initially deferred,
	constraint CBoolean CHECK  (EtatEmprunte BETWEEN 0 AND 1)
);
J'ai trouvé un exemple sur le net, mais je ne le comprends, et je sais pas comment l'adapter à ma table. Ca doit pourtant être facile.


Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
CREATE TABLE test (id NUMBER PRIMARY KEY, name VARCHAR2(30));
 
CREATE SEQUENCE test_sequence
START WITH 1
INCREMENT BY 1;
 
 
CREATE OR REPLACE TRIGGER test_trigger BEFORE INSERT ON test
REFERENCING NEW AS NEW
FOR EACH ROW
BEGIN
SELECT test_sequence.NEXTVAL INTO :NEW.ID FROM dual;
END;
A aucun moment, on ne dit que c'est le champ id qu'il faut augmenter.

Merci de votre aide
LeNovice est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/03/2007, 19h58   #2
Membre habitué
 
Inscription : janvier 2005
Messages : 129
Détails du profil
Informations forums :
Inscription : janvier 2005
Messages : 129
Points : 101
Points : 101
Les incrémentations sous Oracle se font avec des objets que l'on appel des sequences

Comme cité dans ton exemple :

Code :
1
2
3
4
 
CREATE SEQUENCE test_sequence
START WITH 1
INCREMENT BY 1;
Pour incrémenter :

Code :
1
2
 
SELECT test_sequence.NEXTVAL FROM dual;
Pour afficher la valeure actuelle de la séquence :

Code :
1
2
 
SELECT test_sequence.CURVAL FROM dual;
Tu peux parametrer ta séquence avec pas mal de parametres, aussi je t'invite a faire une recherche !
guigui_cwoco est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/05/2007, 11h48   #3
Invité régulier
 
Inscription : juin 2006
Messages : 24
Détails du profil
Informations forums :
Inscription : juin 2006
Messages : 24
Points : 6
Points : 6
bonjour,
moi je fais exactement la meem chose sans faire de trigger dans un premier dtemps mais ca marche pas...

je crée ma_seq de la meme facon.
quand je fais
Code :
SELECT ma_seq.NEXTVAL FROM dual;
c'est nikel ca increment bien de un.
Mais quand fais un
Code :
INSERT INTO test VALUES(ma_seq.NEXTVAL,'test');
ca incremente dans ma table :
1
21
41
...

quelqu'un c'est-il pourquoi?
inge2007 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/05/2007, 12h00   #4
Membre régulier
 
Inscription : avril 2007
Messages : 81
Détails du profil
Informations personnelles :
Âge : 30
Localisation : France, Paris (Île de France)

Informations forums :
Inscription : avril 2007
Messages : 81
Points : 91
Points : 91
Envoyer un message via MSN à sefaxe82
bjr.
tu peux nous montrer le code que ta utilisé pour créer ta sequence. il me semble que ta séquence s'incrémente d'un pas=20 à chaque fois.
sefaxe82 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/05/2007, 14h27   #5
Invité régulier
 
Inscription : juin 2006
Messages : 24
Détails du profil
Informations forums :
Inscription : juin 2006
Messages : 24
Points : 6
Points : 6
jai bien fait un increment by 1.
j'ai toute refait en ligne de command et maintement ca marche....

bizarre mais c'est ok maitenant merci quand meme.
inge2007 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 09h19.


 
 
 
 
Partenaires

Hébergement Web