Accueil Foire Aux Questions Trouver d'autres membres Rechercher Utilisez le vBpad pour stocker des notes personnelles Ici, vous pouvez voir les sujets auxquels vous avez souscris, vos messages privés; et modifier vos informations personnelles et préférences. Statistiques du forum Enregistrez vous gratuitement ! Se déconnecter  
Forum OXMO Forum OXMO > Section Technique > Software > [CONSEIL] clé autoincrémentée sous oracle


Aller au Forum:
Notez ce sujet :

  Sujet précédent   Sujet suivant
Auteur
Sujet Poster un nouveau sujet    Poster une réponse
 gisele  Rechercher tous les messages de ce membre Cliquez ici pour envoyer un message privé à cet utilisateur
Newbie

Déconnecté

Niveau : 1
N° de Membre : 13084

Ancienneté : 95%
Participation : 1%
Inscription: 27 Jul 2003
Localisation:
Age: 54
Messages: 18
Sujets Lancés : 5

[CONSEIL] clé autoincrémentée sous oracle

salut tous, oracle ne proposant pas l'autoincrémentation pour les clés primaires, il parait qu'il faut creer un generateur qu'on pourra solliciter avec un trigger.
quelqu'un sait comme,nt on le fait ce generateur sous oracle?


__________________

il n'y a pas de sotte existence

Edité par Maousse le 28-10-2003 à 09:42

Signaler ce message à un modérateur | IP: Logguée
Temps en ligne : 5 Heures, 22 Minutes, 54 Secondes en ligne

Old Post 28-10-2003 09:03
Cliquez ici pour voir le profil de gisele Cliquez ici pour lui envoyer un message privé  Visiter la Page Perso de gisele! Trouver plus de messages de gisele Ajouter gisele à votre liste d'amis Editer/Effacer le Message Citer le message dans la réponse
 shakes808080  Rechercher tous les messages de ce membre Cliquez ici pour envoyer un message privé à cet utilisateur
Guru

Déconnecté

Niveau : 5
N° de Membre : 517

Ancienneté : 100%
Participation : 11%
Inscription: 08 Mar 2002
Localisation:
Messages: 8978
Sujets Lancés : 354

<!-- [msg_moderateur] --> Merci de t'en tenir à la liste des tags autorisés.


Je ne connais pas la notion d'autoincrémentation sous oracle. En tout cas pas sous oracle 8. C'est qqchose qui débarque avec la v9 ?


__________________
Racket logiciel


Signaler ce message à un modérateur | IP: Logguée
Temps en ligne : 45 Jours, 5 Heures, 55 Minutes, 7 Secondes en ligne

Old Post 28-10-2003 09:37
Cliquez ici pour voir le profil de shakes808080 Cliquez ici pour lui envoyer un message privé  Trouver plus de messages de shakes808080 Ajouter shakes808080 à votre liste d'amis Editer/Effacer le Message Citer le message dans la réponse
 Maousse  Rechercher tous les messages de ce membre Cliquez ici pour envoyer un message privé à cet utilisateur
Guru

Déconnecté

Niveau : 5
N° de Membre : 1121

Ancienneté : 100%
Participation : 18%
Inscription: 14 Apr 2002
Localisation:
Messages: 15626
Sujets Lancés : 211

Bonjour Gisèle.

Change le TAG pour [CONSEIL] STP, ton titre peut être changé en [CONSEIL] clé autoincrémentée sous oracle .

Edit Maousse : lol mince, grillé par Shakes !


__________________
Time goes by


Signaler ce message à un modérateur | IP: Logguée
Temps en ligne : 53 Jours, 3 Heures, 16 Minutes, 51 Secondes en ligne

Old Post 28-10-2003 09:37
Cliquez ici pour voir le profil de Maousse Cliquez ici pour lui envoyer un message privé  Trouver plus de messages de Maousse Ajouter Maousse à votre liste d'amis Editer/Effacer le Message Citer le message dans la réponse
 Solacin  Rechercher tous les messages de ce membre Cliquez ici pour envoyer un message privé à cet utilisateur
Guru

Déconnecté

Niveau : 5
N° de Membre : 11117

Ancienneté : 96%
Participation : 10%
Inscription: 23 Mar 2003
Localisation: 974
Age: 52
Messages: 8254
Sujets Lancés : 28

@gisele :
Bon, voila une méthode qui te permettra de faire de l'autoincrémentation sous Oracle
c'est en anglais, mais c'est super simple à comprendre :

Citation:

Suppose you have a database and you want each entry to be identified by a unique number. You can do this easily in mysql by specifying "auto_increment" for your number, but Oracle makes you work a little more to get it done. Here is one way to do it by creating two database objects, a sequence and a trigger. I find myself wanting to do this every now and then but not often enough that I remember the syntax from time to time, so I decided it was time to write myself up a little cheat sheet. This is an extremely basic outline, so please try it first on a test table if you don't know what you're doing.

1. Let's say we have a table called "test" with two columns, id and testdata. (This is just a dumb quick example, so I won't bother to specify any constraints on id.)


create table test (id number, testdata varchar2(255));

2. Next we'll create a sequence to use for the id numbers in our test table.


create sequence test_seq
start with 1
increment by 1
nomaxvalue;

You could change "start with 1" to any number you want to begin with (e.g. if you already have 213 entries in a table and you want to begin using this for your 214th entry, replace with "start with 214"). The "increment by 1" clause is the default, so you could omit it. You could also replace it with "increment by n" if you want it to skip n-1 numbers between id numbers. The "nomaxvalue" tells it to keep incrementing forever as opposed to resetting at some point. i (I'm sure Oracle has some limitation on how big it can get, but I don't know what that limit is).

3. Now we're ready to create the trigger that will automatically insert the next number from the sequence into the id column.


create trigger test_trigger
before insert on test
for each row
begin
select test_seq.nextval into :new.id from dual;
end;
/

Obviously you would replace "test_trigger" with something a little more meaningful for the database table you want to use it with, "test" would be your table name, and the "id" in :new.id would be replaced with the name of the column. Every time a new row is inserted into test, the trigger will get the next number in the sequence from test_seq and set the "id" column for that row to whatever the sequence number is. Note that sequences sometimes appear to skip numbers because Oracle caches them to be sure that they are always unique, so this may not be your ideal solution if it's really important that the id is exactly sequential and not just mostly sequential and always unique.



--------------------------------------------------------------------------------

Here are a couple of questions the above might raise. This is pretty intuitive stuff, but I'm aiming it at the Oracle newbie since no expert would be reading this page anyway.

How do you tell what sequences and triggers are already out there?


select sequence_name from user_sequences;
select trigger_name from user_triggers;

How do you get rid of a sequence or trigger you created?


drop sequence test_seq;
drop trigger test_trigger;

Again, replace test_seq and test_trigger with the specific names you used. You can also keep the trigger but disable it so it won't automatically populate the id column with every insert (and enable it again later if you want):


alter trigger test_trigger disable;
alter trigger test_trigger enable;


__________________


Signaler ce message à un modérateur | IP: Logguée
Temps en ligne : 25 Jours, 5 Heures, 22 Minutes, 48 Secondes en ligne

Old Post 28-10-2003 10:29
Cliquez ici pour voir le profil de Solacin Cliquez ici pour lui envoyer un message privé  Trouver plus de messages de Solacin Ajouter Solacin à votre liste d'amis       Editer/Effacer le Message Citer le message dans la réponse
 Myrtul  Rechercher tous les messages de ce membre Cliquez ici pour envoyer un message privé à cet utilisateur
Débutant

Déconnecté

Niveau : 1
N° de Membre : 4144

Ancienneté : 98%
Participation : 1%
Inscription: 02 Sep 2002
Localisation: pas loin...
Messages: 235
Sujets Lancés : 15

Hop la, je me permet de ramener ma fraise etant dba oracle...
Le moyen de creer une clef autoincrementée sous oracle est sous la forme d'une sequence+ trigger .
(Une sequence est un objet qui s'auto incremente quand on y fait appel)

piti exemple, c'est toujours plus parlant.
je veux que la colonne Id de ma table test s'autoincremente dés que j'ajoute un enregistrement dans celle ci
#Creation de la table
create table test (id number , data varchar2(10));

#creation de la sequence
Create sequence my_seq start with 1 increment by 1 nocycle cache 5;

# Creation du trigger
create or replace trigger inc_test_id
before insert on test
for each row
declare
n number;
begin
if :old.id is null then
select my_seq.nextval into n from dual;
:new.id := n;
end if;
end;
/

Chaque appel a my_seq.nextval incrementera la clef. La valeur initiale etant definie a la creation
SQL>select my_seq.nextval from dual ;
NEXTVAL
----------
1

SQL> select my_seq.nextval from dual ;
NEXTVAL
----------
2

Si maintenant je fais des insertions dans la table test
SQL>insert into test (data) values ("Hello1");
SQL>insert into test (data) values ("Hello2");
SQL>insert into test (data) values ("Hello3");

On verifie que la sequence est bien incrementée.
SQL>select * from test;
ID DATA
---------- ----------
1 Hello1
2 Hello2
3 Hello3



ATTENTION: il peut y avoir des 'trous' dans la creation , la sequence ne garantie que l'unicité des id, c'est de toute facon inutile et illogique de vouloir absolument des chiffres qui se suivent (que se passe t il quand on supprime un enregistrement ?) .


__________________
Myrtul
:wq


Signaler ce message à un modérateur | IP: Logguée
Temps en ligne : 3 Jours, 4 Heures, 56 Minutes, 0 Seconde en ligne

Old Post 28-10-2003 11:11
Cliquez ici pour voir le profil de Myrtul Cliquez ici pour lui envoyer un message privé  Trouver plus de messages de Myrtul Ajouter Myrtul à votre liste d'amis Editer/Effacer le Message Citer le message dans la réponse
 Myrtul  Rechercher tous les messages de ce membre Cliquez ici pour envoyer un message privé à cet utilisateur
Débutant

Déconnecté

Niveau : 1
N° de Membre : 4144

Ancienneté : 98%
Participation : 1%
Inscription: 02 Sep 2002
Localisation: pas loin...
Messages: 235
Sujets Lancés : 15

ah bein je me suis fais eu de vitesse


__________________
Myrtul
:wq


Signaler ce message à un modérateur | IP: Logguée
Temps en ligne : 3 Jours, 4 Heures, 56 Minutes, 0 Seconde en ligne

Old Post 28-10-2003 11:13
Cliquez ici pour voir le profil de Myrtul Cliquez ici pour lui envoyer un message privé  Trouver plus de messages de Myrtul Ajouter Myrtul à votre liste d'amis Editer/Effacer le Message Citer le message dans la réponse
 shakes808080  Rechercher tous les messages de ce membre Cliquez ici pour envoyer un message privé à cet utilisateur
Guru

Déconnecté

Niveau : 5
N° de Membre : 517

Ancienneté : 100%
Participation : 11%
Inscription: 08 Mar 2002
Localisation:
Messages: 8978
Sujets Lancés : 354

Citation:
Message écrit par Myrtul, le 28-10-2003 à 11:13
ah bein je me suis fais eu de vitesse


oui,mais c'est en français


__________________
Racket logiciel


Signaler ce message à un modérateur | IP: Logguée
Temps en ligne : 45 Jours, 5 Heures, 55 Minutes, 7 Secondes en ligne

Old Post 28-10-2003 11:27
Cliquez ici pour voir le profil de shakes808080 Cliquez ici pour lui envoyer un message privé  Trouver plus de messages de shakes808080 Ajouter shakes808080 à votre liste d'amis Editer/Effacer le Message Citer le message dans la réponse
 wlad93  Rechercher tous les messages de ce membre Cliquez ici pour envoyer un message privé à cet utilisateur
Expert

Déconnecté

Niveau : 3
N° de Membre : 4328

Ancienneté : 98%
Participation : 3%
Inscription: 09 Sep 2002
Localisation: Utopia
Messages: 2596
Sujets Lancés : 163

Et c'est une rédaction originale, spéciale oxmo !

Bravo Myrtul !


Signaler ce message à un modérateur | IP: Logguée
Temps en ligne : 27 Jours, 9 Heures, 6 Minutes, 2 Secondes en ligne

Old Post 28-10-2003 11:31
Cliquez ici pour voir le profil de wlad93 Cliquez ici pour lui envoyer un message privé  Trouver plus de messages de wlad93 Ajouter wlad93 à votre liste d'amis Editer/Effacer le Message Citer le message dans la réponse
 Solacin  Rechercher tous les messages de ce membre Cliquez ici pour envoyer un message privé à cet utilisateur
Guru

Déconnecté

Niveau : 5
N° de Membre : 11117

Ancienneté : 96%
Participation : 10%
Inscription: 23 Mar 2003
Localisation: 974
Age: 52
Messages: 8254
Sujets Lancés : 28

@Myrtul :
Merci pour la version française (moi, je ne suis pas DBA, donc j'ai mis ce que j'ai trouvé surtout )


__________________


Signaler ce message à un modérateur | IP: Logguée
Temps en ligne : 25 Jours, 5 Heures, 22 Minutes, 48 Secondes en ligne

Old Post 28-10-2003 15:10
Cliquez ici pour voir le profil de Solacin Cliquez ici pour lui envoyer un message privé  Trouver plus de messages de Solacin Ajouter Solacin à votre liste d'amis       Editer/Effacer le Message Citer le message dans la réponse
 gisele  Rechercher tous les messages de ce membre Cliquez ici pour envoyer un message privé à cet utilisateur
Newbie

Déconnecté

Niveau : 1
N° de Membre : 13084

Ancienneté : 95%
Participation : 1%
Inscription: 27 Jul 2003
Localisation:
Age: 54
Messages: 18
Sujets Lancés : 5

salut d'abord pardon pour mon indiscipline editoriale et merci d'abord corrigé mon titre de topic.
pis surtout merci pour les réponses la sequence c'est pilpoil la soluce et ça marche.
le trigger est il indispensable?
je crois qu'ensuite on peut également le gerer directement dans l'insert
avec
insert into ma_table (id,.....,.....) values(nom_de_la_sequence.nextval,......,.......)
quelqu'un peut confirmer?
a+ les gens


__________________

il n'y a pas de sotte existence


Signaler ce message à un modérateur | IP: Logguée
Temps en ligne : 5 Heures, 22 Minutes, 54 Secondes en ligne

Old Post 29-10-2003 09:06
Cliquez ici pour voir le profil de gisele Cliquez ici pour lui envoyer un message privé  Visiter la Page Perso de gisele! Trouver plus de messages de gisele Ajouter gisele à votre liste d'amis Editer/Effacer le Message Citer le message dans la réponse
 Maousse  Rechercher tous les messages de ce membre Cliquez ici pour envoyer un message privé à cet utilisateur
Guru

Déconnecté

Niveau : 5
N° de Membre : 1121

Ancienneté : 100%
Participation : 18%
Inscription: 14 Apr 2002
Localisation:
Messages: 15626
Sujets Lancés : 211

Maousse en plein rangement...
Ce topic est du Soft, alors zouuuu en section Software


__________________
Time goes by


Signaler ce message à un modérateur | IP: Logguée
Temps en ligne : 53 Jours, 3 Heures, 16 Minutes, 51 Secondes en ligne

Old Post 29-10-2003 10:26
Cliquez ici pour voir le profil de Maousse Cliquez ici pour lui envoyer un message privé  Trouver plus de messages de Maousse Ajouter Maousse à votre liste d'amis Editer/Effacer le Message Citer le message dans la réponse
 Myrtul  Rechercher tous les messages de ce membre Cliquez ici pour envoyer un message privé à cet utilisateur
Débutant

Déconnecté

Niveau : 1
N° de Membre : 4144

Ancienneté : 98%
Participation : 1%
Inscription: 02 Sep 2002
Localisation: pas loin...
Messages: 235
Sujets Lancés : 15

Citation:
le trigger est il indispensable?

si tu veux de l'auto increment oui (comme l'equivalent en mysql) , tu peux bien sur passer par l'appel a la sequence dans ton ordre sql . "

timtowtdi" comme dirait l'autre


__________________
Myrtul
:wq


Signaler ce message à un modérateur | IP: Logguée
Temps en ligne : 3 Jours, 4 Heures, 56 Minutes, 0 Seconde en ligne

Old Post 29-10-2003 21:04
Cliquez ici pour voir le profil de Myrtul Cliquez ici pour lui envoyer un message privé  Trouver plus de messages de Myrtul Ajouter Myrtul à votre liste d'amis Editer/Effacer le Message Citer le message dans la réponse
 gisele  Rechercher tous les messages de ce membre Cliquez ici pour envoyer un message privé à cet utilisateur
Newbie

Déconnecté

Niveau : 1
N° de Membre : 13084

Ancienneté : 95%
Participation : 1%
Inscription: 27 Jul 2003
Localisation:
Age: 54
Messages: 18
Sujets Lancés : 5

euh vi y a quand même une question qui m'interpelle dans la creation de la sequence qui sommes toute est tres simple sauf un truc:
pourquoi nocycle cache 5?


__________________

il n'y a pas de sotte existence


Signaler ce message à un modérateur | IP: Logguée
Temps en ligne : 5 Heures, 22 Minutes, 54 Secondes en ligne

Old Post 05-12-2003 11:37
Cliquez ici pour voir le profil de gisele Cliquez ici pour lui envoyer un message privé  Visiter la Page Perso de gisele! Trouver plus de messages de gisele Ajouter gisele à votre liste d'amis Editer/Effacer le Message Citer le message dans la réponse
 Myrtul  Rechercher tous les messages de ce membre Cliquez ici pour envoyer un message privé à cet utilisateur
Débutant

Déconnecté

Niveau : 1
N° de Membre : 4144

Ancienneté : 98%
Participation : 1%
Inscription: 02 Sep 2002
Localisation: pas loin...
Messages: 235
Sujets Lancés : 15

nocycle indique que ta sequence ne boucle pas . Elle demarre a la valeur que tu lui donne (start with) et se termine par la valeur maximale (indiqué dans l'ordre de creation par maxvalue ou par default a 1.0E+27)

cache 5 te permet de mettre en memoire les 5 prochaines valeurs de ta sequence. Cela est un peu plus performant que de laisser oracle calculer la prochaine valeur mais le desavantage est qu'en cas de crash de ta base tu perds les valeurs en memoire (pas bien grave de toute facon mais il faut eviter d'en mettre trop en cache sinon ta numerotation risque d'avoir de gros trous si tu as des crashs frequents )


un gros doute m'envahit...tu as accés a la doc ?ca aide


__________________
Myrtul
:wq


Signaler ce message à un modérateur | IP: Logguée
Temps en ligne : 3 Jours, 4 Heures, 56 Minutes, 0 Seconde en ligne

Old Post 08-12-2003 16:35
Cliquez ici pour voir le profil de Myrtul Cliquez ici pour lui envoyer un message privé  Trouver plus de messages de Myrtul Ajouter Myrtul à votre liste d'amis Editer/Effacer le Message Citer le message dans la réponse
 Solacin  Rechercher tous les messages de ce membre Cliquez ici pour envoyer un message privé à cet utilisateur
Guru

Déconnecté

Niveau : 5
N° de Membre : 11117

Ancienneté : 96%
Participation : 10%
Inscription: 23 Mar 2003
Localisation: 974
Age: 52
Messages: 8254
Sujets Lancés : 28

Bonne question Myrtul, parce que c'est vrai que sans la doc, c'est plutôt ardue Oracle (je corrige ......... avec la dos, c'est ardue aussi )


__________________


Signaler ce message à un modérateur | IP: Logguée
Temps en ligne : 25 Jours, 5 Heures, 22 Minutes, 48 Secondes en ligne

Old Post 09-12-2003 10:19
Cliquez ici pour voir le profil de Solacin Cliquez ici pour lui envoyer un message privé  Trouver plus de messages de Solacin Ajouter Solacin à votre liste d'amis       Editer/Effacer le Message Citer le message dans la réponse
Il est actuellement 10:35 (GMT) Poster un nouveau sujet    Poster une réponse   
  Sujet précédent   Sujet suivant
Forum OXMO > Section Technique > Software > [CONSEIL] clé autoincrémentée sous oracle

Aller au Forum:
Notez ce sujet :


 Réponse Rapide
Titre: (Optionnel)
Message:

Convertir automatiquement les URLs Montrer la Signature
Afficher une version imprimable | Envoyer cette page par email | S'inscrire à ce sujet | Télécharger ce sujet
Règles du forum :
Créer de nouveaux sujets
Répondre aux messages
Attacher des fichiers
Editer vos messages
: not autorisé
: not autorisé
: not autorisé
: not autorisé
Le Code HTML est OFF
Le Code vB est ON
Les Smileys sont ONs
Le code [IMG] est ON
 
< Contactez-nous - Forum OXMO>

Uptime du serveur SQL : 3 jour(s) 10 heure(s) et 12 minute(s)
Page générée en 0.013844 secondes en exécutant 46 requêtes SQL.
Apache - Compression GZIP : Activée.