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
Libérer: 2025-01-23 23:27:20
original
276 Les gens l'ont consulté

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;
Copier après la connexion

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;
Copier après la connexion

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)
);
Copier après la connexion

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)
);
Copier après la connexion

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)
);
Copier après la connexion

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 de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal