Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Oracle (https://www.clubdelphi.com/foros/forumdisplay.php?f=22)
-   -   Error al eliminar una relación (https://www.clubdelphi.com/foros/showthread.php?t=57232)

PaFernan99 09-06-2008 16:11:20

Error al eliminar una relación
 
Hola gente!
Esta vez los molesto con lo siguiente:
Estoy utilizando Oracle 8i, donde tengo dos tablas en una relación Maestro detalle. El detalle se compone de tres campos que forman una clave primaria, es decir:

--------
Tabla A
--------
|
|
A
-------- ---------
Tabla B >---------------- Tabla C
-------- ----------
V
|
|
--------
Tabla D
--------

Al tratar de un registro padre, ocurre el siguinte error:
Código SQL [-]
SQL Error: ORACLE - ORA-02292: integrity constraint (DBO.FKXXX) violated - child record found

¿Cómo puedo efectivamente borrar el padre la relación sin caer en este error?
La idea es seguir conservando el registro de la relación intacto.

Muchas Gracias!

Neftali [Germán.Estévez] 09-06-2008 17:34:06

Si no he entendido mal, quieres hacer lo que justamente se intenta evitar cuando se define una relación.

Al relacionar A y B defines los registros de B (detalle) que están apuntando a un registro de A (maestro). Al definir esa relación, como añadido se imposibilita que se borre un registro de A si tiene registros de B que apuntan a él.

Si eso se permitiese, dejarías registros de B que apuntan a "nadie", ya que has borrado siu registro relacionado en A.

Lo que se suele hacer normalmente:

(1) Borrar A y sus registros de B, puesto que no tiene sentido que existan.

(2) Borrar A, pero antes eliminar el campo de B que apunta a A (dejandolo nulo, por ejemplo). No es muy habitual, pero a veces se hace por ejemplo, si interesa mantener los registros de B por temas de históricos o por temas de seguridad o trazabilidad.


(3) No permitir borrar A y de alguna manera (campo extra) deshabilitarlo/ocultarlo a todos los efectos del programa.

Dependiendo de tus necesidades, puedes optar por alguna de estas soluciones.

PaFernan99 09-06-2008 18:01:56

Gracias!
 
Gracias Neftali!
Creo que lo que mas me conviene es la 2) por ahora!

Saludos!

avmm2004 15-06-2008 16:30:47

Si quieres utilizar la 2) y quieres que el sistema lo haga solo, cuando te definas la foreign key utiliza ON DELETE SET NULL al final de la definición.


La franja horaria es GMT +2. Ahora son las 14:55:17.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi