web-dev-qa-db-fra.com

comment définir la colonne d'incrémentation automatique avec développeur SQL

Comment définir une colonne pour qu'elle s'incrémente automatiquement avec Oracle SQL Developer? Pourquoi le formulaire est-il désactivé?

Oracle SQL Developer

Remarque: L'image montre le modélisateur de données, mais la question et la réponse principale parlent de la modification d'une base de données existante.

38
Fendi Tri Cahyono

Si vous souhaitez effectuer votre incrémentation automatique de la clé PK, vous devez définir la propriété de colonne ID pour cette clé primaire.

  1. Faites un clic droit sur la table et sélectionnez "Modifier".
  2. Dans la fenêtre "Edition" du tableau, sélectionnez "Colonnes", puis sélectionnez votre colonne PK.
  3. Accédez à l'onglet Colonne ID et sélectionnez Séquence comme colonne. Cela créera un déclencheur et une séquence, et associera la séquence à la clé primaire.

Voir l'image ci-dessous pour une meilleure compréhension.

enter image description here

// Ma source est: http://techatplay.wordpress.com/2013/11/22/Oracle-sql-developer-create-auto-incrementing-primary-key/

79
Daniel Perník

Malheureusement, Oracle ne supporte pas auto_increment comme le fait mysql. Vous devez faire un petit effort supplémentaire pour l'obtenir.

dites ceci est votre table -

CREATE TABLE MYTABLE (
  ID NUMBER NOT NULL,
  NAME VARCHAR2(100)
  CONSTRAINT "PK1" PRIMARY KEY (ID)
);

Vous devrez créer une séquence -

CREATE SEQUENCE S_MYTABLE
START WITH 1
INCREMENT BY 1
CACHE 10;

et un déclencheur -

CREATE OR REPLACE TRIGGER T_MYTABLE_ID
BEFORE INSERT
ON MYTABLE
REFERENCING NEW AS NEW
FOR EACH ROW
BEGIN
  if(:new.ID is null) then
  SELECT S_MYTABLE.nextval
  INTO :new.ID
  FROM dual;
  end if;
END;
/

ALTER TRIGGER "T_MYTABLE_ID" ENABLE;
26
Kshitij

Vous pouvez effectuer une incrémentation automatique dans SQL Modeler. Dans la fenêtre des propriétés de la colonne Cliquez sur: Général puis cochez la case Incrémentation automatique. Après cela, la fenêtre d’incrémentation automatique sera activée pour vous.

6
user1116119

@ tom-studee vous aviez raison, il est possible de le faire dans le modélisateur de données.

Double-cliquez sur votre table, puis allez à la section des colonnes. Ici, double-cliquez sur la colonne qui aura l'incrémentation automatique. Dans la section générale, une case à cocher "auto-incrémentation" est cochée.

Après cela, vous pouvez également aller à la section "auto-incrémentation" pour le personnaliser.

Lorsque vous l'enregistrez et demandez au modélisateur de données de générer le script SQL, vous verrez la séquence et le déclencheur qui représentent votre auto-incrémentation.

3
Bartheleway

[~ # ~] mise à jour [~ # ~] : À partir de Oracle 12c, nous avons la possibilité de créer un champ à incrémentation automatique, mieux que déclencheur et séquence. .

  • Faites un clic droit sur la table et sélectionnez "Modifier".
  • Dans la fenêtre "Edition" du tableau, sélectionnez "Colonnes", puis sélectionnez votre colonne PK.
  • Allez dans la colonne Identity Column et sélectionnez "Generated as Identity" comme Type, mettez 1 dans les champs start with et increment. Cela rendra cette colonne incrémentée automatiquement.

Voir l'image ci-dessous

enter image description here

À partir d'une instruction SQL

La colonne IDENTITY est maintenant disponible sur Oracle 12c:

 create table t1 (
     c1 NUMBER GENERATED by default on null as IDENTITY,
     c2 VARCHAR2(10)
     );

ou spécifier des valeurs de départ et d'incrémentation, empêchant également toute insertion dans la colonne d'identité (GENERATED ALWAYS) (à nouveau, Oracle 12c + uniquement)

create table t1 (
    c1 NUMBER GENERATED ALWAYS as IDENTITY(START with 1 INCREMENT by 1),
    c2 VARCHAR2(10)
    );

[~ # ~] éditer [~ # ~] : si vous rencontrez une erreur telle que "ORA-30673: la colonne à modifier n'est pas une colonne d'identité ", vous devez alors créer une nouvelle colonne et supprimer l’ancienne.

2
Suneel Kumar

Comment procéder avec Oracle SQL Developer: Dans le volet de gauche, sous les connexions, vous trouverez "Séquences", cliquez avec le bouton droit de la souris et sélectionnez "Créer une nouvelle séquence" dans la fenêtre contextuelle contextuelle. Complétez les détails: nom du schéma, nom_de_c séquence, propriétés (commencez par la valeur, valeur minimale, valeur maximale, valeur d'incrément, etc.) et cliquez sur ok. En supposant que vous ayez une table avec une clé qui utilise cet auto_increment, insérez-y simplement dans la table "your_sequence_name.nextval" dans le champ qui utilise cette propriété. Je suppose que cela devrait aider! :)

1
Seeder

Oracle n'a pas de colonnes auto-incrémentées. Vous avez besoin d'une séquence et d'un déclencheur. Voici un article de blog au hasard qui explique comment le faire: http://www.lifftercoffee.com/2006/02/17/how-to-create-auto-increment-columns-in -Oracle/

1
eaolson

J'ai trouvé cet article qui a l'air un peu vieux, mais je me suis dit que je mettrais à jour tout le monde avec mes nouvelles découvertes.

J'utilise Oracle SQL Developer 4.0.2.15 sous Windows. Notre base de données est Oracle 10g (version 10.2.0.1) fonctionnant sous Windows.

Pour créer une colonne auto-incrémentée dans Oracle -

  1. Ouvrez la connexion à la base de données dans l'onglet Connexions
  2. Développez la section Tables et cliquez avec le bouton droit de la souris sur la table contenant la colonne à incrémenter automatiquement, puis sélectionnez Modifier ...
  3. Choisissez la section Colonnes, puis sélectionnez la colonne que vous souhaitez incrémenter automatiquement (colonne Clé primaire).
  4. Ensuite, cliquez sur la section "Colonne d'identité" située sous la liste des colonnes et modifiez le type de "Aucune" à "Séquence de colonne".
  5. Laissez les paramètres par défaut (ou modifiez les noms de la séquence et déclenchez si vous préférez), puis cliquez sur OK.

Votre colonne id (clé primaire) sera désormais auto-incrémentée, mais la séquence commencera à 1. Si vous avez besoin d'incrémenter l'identifiant jusqu'à un certain point, vous devrez exécuter quelques instructions de remplacement sur la séquence.
This post a plus de détails et comment surmonter cela.

J'ai trouvé la solution ici

1
chopsuei3