Colonnes à incrémentation automatique dans Oracle : un guide complet
Les bases de données Oracle, antérieures à la version 12c, n'offraient pas de colonnes natives à incrémentation automatique. Cependant, vous pouvez répliquer efficacement cette fonctionnalité à l'aide de séquences et de déclencheurs. Oracle 12c et les versions ultérieures introduisent de véritables colonnes d'identité, offrant une approche plus rationalisée.
Pré-12c : simulation d'incrémentation automatique avec des séquences et des déclencheurs
Commençons par créer une table nécessitant un ID à incrémentation automatique :
<code class="language-sql">CREATE TABLE departments ( ID NUMBER(10) NOT NULL, DESCRIPTION VARCHAR2(50) NOT NULL );</code>
Ensuite, créez une séquence pour générer des valeurs d'identification uniques :
<code class="language-sql">CREATE SEQUENCE dept_seq START WITH 1;</code>
Enfin, un déclencheur garantit que la valeur de séquence est automatiquement attribuée à la colonne ID
lors de l'insertion :
<code class="language-sql">CREATE OR REPLACE TRIGGER dept_bir BEFORE INSERT ON departments FOR EACH ROW BEGIN SELECT dept_seq.NEXTVAL INTO :new.id FROM dual; END;</code>
Oracle 12c et au-delà : colonnes d'identité
Oracle 12c a introduit des colonnes d'identité natives, simplifiant considérablement le processus :
<code class="language-sql">CREATE TABLE t1 ( c1 NUMBER GENERATED BY DEFAULT ON NULL AS IDENTITY, c2 VARCHAR2(10) );</code>
Options avancées dans Oracle 12c
Oracle 12c offre une personnalisation plus poussée :
<code class="language-sql">CREATE TABLE t1 ( c1 NUMBER GENERATED ALWAYS AS IDENTITY(START WITH 1 INCREMENT BY 1), c2 VARCHAR2(10) );</code>
<code class="language-sql">CREATE SEQUENCE dept_seq START WITH 1; CREATE TABLE departments ( ID NUMBER(10) DEFAULT dept_seq.NEXTVAL NOT NULL, DESCRIPTION VARCHAR2(50) NOT NULL );</code>
Ces méthodes fournissent des solutions efficaces et flexibles pour gérer les colonnes à auto-incrémentation dans les bases de données Oracle, quelle que soit la version.
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!