Oracle - Cambiar contenido clave primaria

 
Vista:

Cambiar contenido clave primaria

Publicado por jose (3 intervenciones) el 14/03/2008 11:56:06
Hola a todos, soy nuevo en sql y me gustaría saber si puedo modificar el contenido

de la clave primaria de una tabla, que a su vez es clave externa en otra.

Lo he probado directamente y me da error debido a la dependencia que existe.

Las tablas son estas:

-- Tabla para guardar los pedidos que hagan a la empresa.

CREATE TABLE PEDIDOS(
CODIGO INT NOT NULL, --Código del pedido, es clave primaria.
FECHAPEDIDO DATE, -- Fecha en la que se hace el pedido.
FECHAENTREGA DATE, --Fecha de entrega del pedido.
TOTAL NUMBER(10,2), --Importe total del pedido.
ESTADO VARCHAR(10) DEFAULT 'PENDIENTE', --Estado en el que se encuentra el pedido (ruta, entregado y pendiente), todos los los pedidos tienen el valor por defecto PENDIENTES.
CLIENTE VARCHAR(10), --Cliente que realiza el pedido, clave externa.
PRIMARY KEY(CODIGO),
FOREIGN KEY (CLIENTE) REFERENCES CLIENTES(DNI)
);

-- Tabla en la que se guardan los productos que componen un pedido, pudiendo
-- un mismo pedido incluir dos cantidades distintas de un mismo producto,
-- con dos precios distintos.

CREATE TABLE DETALLESPEDIDOS(
PRECIO INT NOT NULL, --Precio del producto, forma parte de la clave primaria.
CODIGOPEDIDO INT NOT NULL, --Código del pedido, forma parte de la clave primaria.
CODIGOPRODUCTO INT NOT NULL, --Código del producto, forma parte de la clave primaria.
CANTIDAD INT, --Cantidad.
PRIMARY KEY(CODIGOPEDIDO,CODIGOPRODUCTO,PRECIO),
FOREIGN KEY(CODIGOPEDIDO)REFERENCES PEDIDOS(CODIGO),
FOREIGN KEY(CODIGOPRODUCTO)REFERENCES PRODUCTOS(CODIGO)
);

Quiero modificar el contenido de CODIGO en la tabla PEDIDOS, que a su vez forma parte de la clave primaria en la tabla DETALLESPEDIDOS.

Agradecería que me echarais una mano, gracias.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:Cambiar contenido clave primaria

Publicado por Rodolfo Reyes (445 intervenciones) el 14/03/2008 17:00:47
Realmente no se puede cambiar de forma directo.

Lo que tendrias que hacer es crear nuevamente en labla padre nuevamente el registro y luego en la tabla hija. finalmente eliminar de las dos tablas el registro viejo.

La otra opción es eliminar primero el constraint que une las dos tablas, hacer el update en las dos tablas y volver a crear el contraint.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Cambiar contenido clave primaria

Publicado por jose (3 intervenciones) el 14/03/2008 22:58:08
Me ha servido, muchas gracias de verdad
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar