Maison >base de données >tutoriel mysql >Comment créer des colonnes à incrémentation automatique dans Oracle 11g et versions ultérieures ?

Comment créer des colonnes à incrémentation automatique dans Oracle 11g et versions ultérieures ?

Linda Hamilton
Linda Hamiltonoriginal
2025-01-23 23:31:20251parcourir

How to Create Auto-Incrementing Columns in Oracle 11g and Later?

Création de colonnes de type AUTO_INCREMENT dans Oracle 11g

Dans les versions Oracle jusqu'à 11g, le type de colonne AUTO_INCREMENT n'est pas disponible nativement. Cependant, il existe des mécanismes alternatifs pour obtenir des fonctionnalités similaires.

Utilisation de séquences et de déclencheurs

L'approche la plus courante dans Oracle 11g consiste à utiliser une combinaison d'une séquence et d'un déclencheur :

Tableau Définition :

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;

Définition du déclencheur :

CREATE OR REPLACE TRIGGER dept_bir
BEFORE INSERT ON departments
FOR EACH ROW
BEGIN
  SELECT dept_seq.NEXTVAL
  INTO   :new.id
  FROM   dual;
END;
/

Ce déclencheur attribue une valeur incrémentielle unique aux lignes nouvellement insérées, imitant le comportement de colonnes à incrémentation automatique.

Colonnes IDENTITY (Oracle 12c )

Dans Oracle 12c et versions ultérieures, le type de colonne IDENTITY a été introduit, offrant une véritable fonctionnalité d'incrémentation automatique :

Définition de table :

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

Cette définition crée une colonne 'c1' qui s'incrémente automatiquement à chaque nouvelle ligne insérée dans le table.

Vous pouvez également spécifier des valeurs de départ et d'incrément :

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

Utiliser des séquences comme valeurs par défaut (Oracle 12)

Une autre option dans Oracle 12 et versions ultérieures consiste à utiliser une séquence comme valeur par défaut pour un column :

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)
);

Cette approche attribue des valeurs incrémentielles à l'aide d'une séquence, mais l'opération d'incrémentation réelle est gérée par la base de données.

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