# Primary Key ändern



## -motaro- (16. Februar 2005)

Hallo alle zusammen,

bin schon fast am verzweifeln:

versuche in Oracle 8i mit "UPDATE blibla SET blub='asdfasdf' where blub='asdf'" einen Primary Key zu ändern, nun taucht natürlich ein Fehler auf da es ein Child Key gibt. Nun hab ich gesucht und das einzige was ich bis jetzt gefunden hab ist die ganze Sache mit cascade zu machen, dies kann man leider aber nur beim ertsellen der Tabelle ausführen. 
Kennt jemand eine Methode dies im nachhinein zu machen?

Danke, ciao


----------



## Exceptionfault (16. Februar 2005)

Nun, wenn dein Foreign Key keine CASCADE Klause hat, dann bleibt dir eigentlich nur der Weg das ganze manuell zu machen. D.h. Constraint disablen, parent und child Tabelle updaten und dann Constraint wieder enablen.


```
CREATE TABLE master (
  ID  NUMBER(10) NOT NULL,
  CONSTRAINT PK_MASTER
    PRIMARY KEY (ID) USING INDEX TABLESPACE INDX
);
 
INSERT INTO master VALUES ( 1 );
 
CREATE TABLE child (
  ID     NUMBER(10) NOT NULL,
  PARENT NUMBER(10) NOT NULL,
  CONSTRAINT PK_CHILD
    PRIMARY KEY (ID) USING INDEX TABLESPACE INDX,
  CONSTRAINT FK_MASTER_CHILD
    FOREIGN KEY ( PARENT ) 
    REFERENCES MASTER (ID)
);

INSERT INTO child VALUES (1, 1);

ALTER TABLE child MODIFY 
  CONSTRAINT FK_MASTER_CHILD DISABLE;

UPDATE PARENT set id = 2     where id = 1;
UPDATE CHILD  set parent = 2 where parent = 1;

ALTER TABLE child MODIFY 
  CONSTRAINT FK_MASTER_CHILD ENABLE;
```


----------

