2010-11-10 5 views
2

Je souhaite migrer une table qui utilise une clé primaire composite pour une clé primaire unique.Comment migrer d'une clé primaire composite vers une seule clé d'attribut dans SQL?

Ma table est la suivante:

CREATE TABLE REGM 
    ( 
    LNG_CD VARCHAR2(2 BYTE) NOT NULL ENABLE, 
    REG_NRI NUMBER(10,0) NOT NULL ENABLE, 
    ...  
    CONSTRAINT PK_REGM PRIMARY KEY (LNG_CD, REG_NRI) ENABLE, 
); 

Le tableau REGM utilise comme clé primaire composite LNG_CD et REG_NRI. Je voudrais utiliser un nom de clé primaire REGM_PK à la place, mais utilise toujours LNG_CD et REG_NRI comme clé étrangère.

Jusqu'à présent, ceci est mon approche:

1 - Abandonner le contraint

ALTER TABLE REGM DROP CONSTRAINT PK_REGM; 

2 - Ajouter la colonne clé primaire

ALTER TABLE REGM ADD REGM_PK NUMBER(19,0); 

3 - Créer la séquence

CREATE SEQUENCE REGM_SEQ MINVALUE 1 MAXVALUE 999999999999999999999999999 INCREMENT BY 1 START WITH 2 CACHE 20 NOORDER NOCYCLE ; 

4 - Remplir la colonne avec la séquence

5 - Faire la colonne REGM_PK non nul

6 - Création de la contrainte de clé primaire

Jusqu'à présent, je suis bloqué à l'étape 4

Je sais que je pourrais aussi faire une table de création/copie de date/suppression. Mais je préférerais le faire de manière SQL.

+0

Le titre est une mauvaise explication de ce que vous voulez. Toute clé primaire est unique - y compris une clé composite. Ce que vous voulez vraiment, c'est remplacer une clé composite par une seule clé d'attribut. – sqlvogel

+0

@dportas Merci, corrigé –

Répondre

2

Étape 4:

UPDATE regm 
SET  regm_pk = REGM_SEQ.nextval 
Questions connexes