Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » Oracle »

Camiar contenido de clave primaria

Estas en el tema de Camiar contenido de clave primaria en el foro de Oracle en Foros del Web. 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 ...
  #1 (permalink)  
Antiguo 14/03/2008, 05:07
 
Fecha de Ingreso: marzo-2008
Mensajes: 3
Antigüedad: 16 años, 8 meses
Puntos: 0
Camiar contenido de clave primaria

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.
  #2 (permalink)  
Antiguo 14/03/2008, 05:29
Avatar de matanga  
Fecha de Ingreso: octubre-2007
Ubicación: España
Mensajes: 1.091
Antigüedad: 17 años
Puntos: 85
Re: Camiar contenido de clave primaria

Hola,

Tienes que deshabilitar las foreign keys para poder modificar el campo que corresponde a la primary key.

Código:
SQL> create table t1 (id number);

Tabla creada.

SQL> alter table t1 add constraint pk_t1_id primary key(id);

Tabla modificada.

SQL> create table t2 (id number);

Tabla creada.

SQL> alter table t2 add constraint fk_t2_id foreign key (id) references t1(id) ;

Tabla modificada.

SQL> insert into t1 values (1);

1 fila creada.

SQL> insert into t1 values (2);

1 fila creada.

SQL> insert into t1 values (3);

1 fila creada.

SQL> insert into t2 values (1);

1 fila creada.

SQL> insert into t2 values (2);

1 fila creada.

SQL> insert into t2 values (3);

1 fila creada.

SQL> alter table t2 disable constraint fk_t2_id;

Tabla modificada.

SQL> update t1 set id = id + 5;

3 filas actualizadas.

SQL> update t2 set id = id + 5;

3 filas actualizadas.

SQL> alter table t2 enable validate constraint fk_t2_id;

Tabla modificada.
Recuerda utilizar la opcion validate cuando habilites nuevamente la foreign key, esto es para que valide que la relacion se mantiene.

Saludos
  #3 (permalink)  
Antiguo 14/03/2008, 15:47
 
Fecha de Ingreso: marzo-2008
Mensajes: 3
Antigüedad: 16 años, 8 meses
Puntos: 0
Re: Camiar contenido de clave primaria

Muchas gracias me ha servido, gracias
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 15:03.