Maison >base de données >tutoriel mysql >Comment créer des colonnes à incrémentation automatique dans Oracle : 11g contre 12c et au-delà ?

Comment créer des colonnes à incrémentation automatique dans Oracle : 11g contre 12c et au-delà ?

Patricia Arquette
Patricia Arquetteoriginal
2025-01-23 23:27:20221parcourir

How to Create Auto-Incrementing Columns in Oracle: 11g vs. 12c and Beyond?

Création de colonnes à incrémentation automatique dans Oracle 11g et au-delà

Les bases de données Oracle n'ont pas le concept de colonnes à incrémentation automatique jusqu'à la version 12c. Malgré cela, il est possible d'émuler ce comportement dans Oracle 11g à l'aide d'une séquence et d'un déclencheur.

Méthode pour Oracle 11g

Commencez par définir la table avec une clé primaire column :

CREATE TABLE departments (
  ID NUMBER(10) NOT NULL,
  DESCRIPTION VARCHAR2(50) NOT NULL
);

ALTER TABLE departments ADD (
  CONSTRAINT dept_pk PRIMARY KEY (ID)
);

CREATE SEQUENCE dept_seq START WITH 1;

Ensuite, créez un déclencheur qui génère des valeurs d'ID uniques pour les nouveaux insertions :

CREATE OR REPLACE TRIGGER dept_bir 
BEFORE INSERT ON departments 
FOR EACH ROW

BEGIN
  SELECT dept_seq.NEXTVAL
  INTO   :new.id
  FROM   dual;
END;

Mise à jour pour Oracle 12c et versions ultérieures

Oracle 12c introduit un type de colonne IDENTITY natif, offrant une véritable fonctionnalité d'incrémentation automatique :

create table t1 (
    c1 NUMBER GENERATED by default on null as IDENTITY,
    c2 VARCHAR2(10)
);

Vous pouvez également spécifier un démarrage et un incrément personnalisés valeurs :

create table t1 (
    c1 NUMBER GENERATED ALWAYS as IDENTITY(START with 1 INCREMENT by 1),
    c2 VARCHAR2(10)
);

Ou, dans Oracle 12c et versions ultérieures, utilisez une séquence comme valeur par défaut :

CREATE SEQUENCE dept_seq START WITH 1;

CREATE TABLE departments (
  ID NUMBER(10) DEFAULT dept_seq.nextval NOT NULL,
  DESCRIPTION VARCHAR2(50) NOT NULL
);

ALTER TABLE departments ADD (
  CONSTRAINT dept_pk PRIMARY KEY (ID)
);

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn