2017-08-23 2 views
1

J'ai un oracle db qui n'a pas de clé étrangère, toutes les relations de table sont gérées par le logiciel. Par exemple, une table Customer avec des colonnes Customer.customercode, Customer.Namecustomercode est la clé primaire et une table Order avec des colonnes Order.ordercode (PK), Order.customercodecustomercode n'a pas de contrainte de clé étrangère. Jusqu'à présent, l'application gère toutes les transactions et prend en charge toutes les relations de table afin que les données soient cohérentes. J'ai besoin de changer ceci à une implémentation de DB relationnelle correcte, donc j'ai besoin de modifier Order.customercode pour être un FK de la table Customer. Toute instruction sqlplus pour le faire sans perdre mes données?Modification d'une colonne existante à une clé étrangère

+1

si toutes les données sont cohérentes alors il n'y a pas de problème, 'alter table pour ajouter la contrainte ord_cust_fk client références clés étrangères (de customercode) (de customercode);' et vous avez terminé. Heureusement, il existe déjà un index sur 'order.customercode' sinon il est temps d'en ajouter un. –

Répondre

2

Dans Oracle, la création d'une clé étrangère ne perdra jamais de données, mais elle échouera si les données ne correspondent pas à la nouvelle contrainte. Si l'on suppose que vos données sont OK, vous pouvez utiliser une instruction alter table:

ALTER TABLE order 
ADD CONSTRAINT order_customer_fk FOREIGN KEY (customercode) 
REFERENCES customer(customercode)