Maison >base de données >tutoriel mysql >Comment puis-je ajouter une fonctionnalité d'incrémentation automatique aux colonnes existantes dans les bases de données Oracle ?

Comment puis-je ajouter une fonctionnalité d'incrémentation automatique aux colonnes existantes dans les bases de données Oracle ?

DDD
DDDoriginal
2024-12-26 09:46:10615parcourir

How Can I Add Auto-Incrementing Functionality to Existing Columns in Oracle Databases?

Incrémentation automatique des colonnes existantes dans les bases de données Oracle

L'ajout d'une fonctionnalité d'incrémentation automatique à une colonne existante dans Oracle peut être réalisé par différentes approches selon sur la version Oracle.

Oracle 12c et supérieur : utilisation de l'identité Colonnes

Oracle 12c a introduit la fonctionnalité de colonne IDENTITY qui simplifie l'incrémentation automatique :

CREATE TABLE t (
ID NUMBER GENERATED ALWAYS AS IDENTITY START WITH 150111111 INCREMENT BY 1,
text VARCHAR2(50)
);

Oracle 11g et versions antérieures : séquence et déclencheur

Pour les versions Oracle antérieures à 12c, vous pouvez utiliser une combinaison de séquence et déclencheur :

  1. Créer une séquence :
CREATE SEQUENCE t_seq START WITH 150111111 INCREMENT BY 1;
  1. Modifier la table et ajouter une clé primaire :
ALTER TABLE t ADD CONSTRAINT id_pk PRIMARY KEY (ID);
  1. Créer Déclencheur :
CREATE OR REPLACE TRIGGER t_trg
BEFORE INSERT ON t
FOR EACH ROW
WHEN (new.id IS NULL)
BEGIN
SELECT t_seq.NEXTVAL INTO :new.id FROM dual;
END;

Ce déclencheur remplit automatiquement la colonne ID avec les valeurs de la séquence.

Exemple d'utilisation :

Pour les deux méthodes, les insertions rempliront la colonne ID avec des valeurs auto-incrémentées à partir de 150111111.

INSERT INTO t(text) VALUES('auto-increment test');

L'interrogation de la table confirme les ID auto-incrémentés :

SELECT * FROM t;

ID                        TEXT
------------------------- ----------------------------------------
150111111 This table has an auto-incrementing column

Remarque : Oracle crée implicitement une séquence nommée ISEQ$$ lors de l'utilisation de l'identité colonnes.

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