Aller au contenu

Oracle Database/Oracle ignore l'autoincrement

Un livre de Wikilivres.

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.

  1. http://www.w3schools.com/sql/sql_autoincrement.asp