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

Comment puis-je ajouter une fonctionnalité d'incrémentation automatique aux colonnes Oracle existantes ?

Susan Sarandon
Susan Sarandonoriginal
2024-12-19 13:39:10393parcourir

How Can I Add Auto-Increment Functionality to Existing Oracle Columns?

Incrémentation automatique pour les colonnes Oracle préexistantes

Bien que l'ajout d'une fonctionnalité d'incrémentation automatique à une colonne existante ne soit pas pris en charge de manière native dans Oracle, diverses approches peuvent être utilisées pour y parvenir.

11g et Prior : Séquence et Déclencheur

Pour les versions Oracle 11g et antérieures, une séquence et un déclencheur peuvent être utilisés :

  • Créer une séquence : Cette séquence générera le valeurs auto-incrémentées.
  • Modifiez le tableau : Ajoutez une contrainte de clé primaire au colonne.
  • Créer un déclencheur : Le déclencheur insérera la valeur suivante de la séquence dans la colonne chaque fois qu'une nouvelle ligne est insérée (si la colonne est nulle).

Exemple :

-- Create sequence
CREATE SEQUENCE t_seq START WITH 150111111 INCREMENT BY 1;

-- Alter table
ALTER TABLE t ADD CONSTRAINT id_pk PRIMARY KEY (ID);

-- Create trigger
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;

12c et versions ultérieures : identité Colonne

Oracle 12c a introduit la fonctionnalité de colonne d'identité, qui permet l'auto-incrémentation dans la table elle-même :

  • Créer une table avec une colonne d'identité : Spécifiez l'attribut GÉNÉRÉ ALWAYS AS IDENTITY pour le colonne.
  • Exemple :

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

Veuillez noter que ces approches ne mettent pas à jour les valeurs existantes dans la colonne. Pour modifier les valeurs existantes, une requête de mise à jour distincte serait nécessaire.

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