Oracle Database/Oracle ignore l'autoincrement
La fonction AUTO_INCREMENT de MySQL est très pratique pour déléguer le calcul d'un nouvel identifiant (entier) d'une ligne au système. Malheureusement, cette fonction n'existe pas pour Oracle et il faut donc passer par la création d'une séquence pour obtenir le même résultat[1].
Exemple pratique
[modifier | modifier le wikicode]La requête suivante illustre la création d'une table munie de l'équivalent de la fonction d'auto-incrémentation: Elle créé une sequence nommée "SQ_FOOTBALL_MATCH", commençant à 1, incrémentée automatiquement par pas de 1. Aucune valeur ne sera stockée en cache.
--Exemple d'autoincrement Oracle
--drop table FOOTBALL_MATCH
create table FOOTBALL_MATCH
(
MATCH_ID NUMBER not null,
LOCAL_ID NUMBER not null,
VISITEUR_ID NUMBER not null,
SCORE_LOCAL NUMBER not null,
SCORE_VISITEUR NUMBER not null,
--Etc... on pourrait enregistrer des informations sur l'arbitre, la date, le nombre de spectateurs
COMMENTAIRE VARCHAR2(100)
)
;
CREATE SEQUENCE "SQ_FOOTBALL_MATCH" MINVALUE 1 MAXVALUE 9999999999999999999999999999 INCREMENT BY 1 START WITH 1 NOCACHE NOORDER NOCYCLE ;
--PK
alter table FOOTBALL_MATCH add constraint PK_FOOTBALL_MATCH primary key (MATCH_ID);
-- Décommenter pour FK => D'abord créer la table pointée EQUIPE
--alter table FOOTBALL_MATCH add constraint FK_LOCAL_ID foreign key (LOCAL_ID) references EQUIPE (EQUIPE_ID);
--alter table FOOTBALL_MATCH add constraint FK_VISITEUR_ID foreign key (VISITEUR_ID) references EQUIPE (EQUIPE_ID);
COMMENT ON COLUMN FOOTBALL_MATCH.MATCH_ID IS 'Cle primaire';
COMMENT ON COLUMN FOOTBALL_MATCH.LOCAL_ID IS 'Equipe jouant à domicile';
COMMENT ON COLUMN FOOTBALL_MATCH.VISITEUR_ID IS 'Equipe visiteuse';
-- Décommenter pour Grant (le profil doit exister)
--grant select on FOOTBALL_MATCH to PROFIL_UTILISATEUR;
Pour insérer une nouvelle ligne dans la table ainsi créée:
--Exemple d'INSERT
INSERT INTO FOOTBALL_MATCH(MATCH_ID,LOCAL_ID,VISITEUR_ID,SCORE_LOCAL,SCORE_VISITEUR)
VALUES ("SQ_FOOTBALL_MATCH".nextval -- Utilisation de la séquence
,630,599 -- ID des équipes
,1,0) -- Score
Cette instruction va récupérer la prochaine valeur fournie par la séquence "SQ_FOOTBALL_MATCH" et proposer celle-ci comme valeur MATCH_ID de la ligne insérée.