Colonne à incrémentation automatique dans la base de données Oracle
Dans Oracle Database, contrairement à d'autres systèmes de bases de données, il n'existait aucun concept d'incrémentation automatique des colonnes jusqu'à la version 11g. Cela peut créer des défis lors de la création de tables nécessitant des identifiants à incrémentation automatique. Heureusement, vous pouvez utiliser des séquences et des déclencheurs pour simuler ce comportement.
Simulation utilisant des séquences et des déclencheurs
Dans Oracle 11g et versions antérieures, vous pouvez créer des séquences et des déclencheurs pour simuler des colonnes à incrémentation automatique. Tout d'abord, définissez un tableau contenant une colonne numérique utilisée comme identifiant :
<code class="language-sql">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;</code>
Ensuite, créez un déclencheur qui remplit la colonne ID avec la valeur suivante de la séquence lorsqu'un nouvel enregistrement est inséré :
<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>
Colonne Identité (Oracle 12c et versions ultérieures)
À partir d'Oracle 12c, les colonnes d'identité ont été introduites comme une véritable fonctionnalité d'incrémentation automatique. Vous pouvez définir une colonne d'identité dans un tableau comme suit :
<code class="language-sql">CREATE TABLE t1 ( c1 NUMBER GENERATED BY DEFAULT ON NULL AS IDENTITY, c2 VARCHAR2(10) );</code>
Les colonnes d'identité peuvent également spécifier des valeurs de départ et incrémentielles pour empêcher les mises à jour manuelles :
<code class="language-sql">CREATE TABLE t1 ( c1 NUMBER GENERATED ALWAYS AS IDENTITY(START WITH 1 INCREMENT BY 1), c2 VARCHAR2(10) );</code>
Utiliser des séquences comme alternative aux valeurs par défaut
Oracle 12 propose également un moyen d'utiliser des séquences comme valeurs par défaut :
<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>
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!