Inicio > Base de Datos > Identificar constraints que impiden delete en SQL. ORA-02292

Identificar constraints que impiden delete en SQL. ORA-02292

Es muy común que cuando queremos hacer supresiones en una tabla de una base de datos nos veamos enfrentados con las constraint de la misma. Normalmente si la base de Datos ha sido creada con cuidado, estas constraints permiten evitar que la supresión de datos generen inconsistencias. En ese caso, ver mensajes que nos impiden suprimir los datos así como así es algo positivo.

delete from books where authorId = '9e51a7f758204f538d556049156f8f7b'

Error starting at line 1 in command:
delete from books where authorId = '9e51a7f758204f538d556049156f8f7b'
Error report:
SQL Error: ORA-02292: integrity constraint (MY_LIBRARY_SCHEMA.FK27B99837E9840F67) violated - child record found
02292. 00000 - "integrity constraint (%s.%s) violated - child record found"
*Cause: attempted to delete a parent key value that had a foreign
dependency.
*Action: delete dependencies first then parent or disable constraint.

Sin embargo, a veces estamos seguros que tenemos que eliminar ciertos datos y no necesariamente conocemos las dependencias entre las otras tablas de la base de datos y la tabla donde queremos eliminar datos. Si al momento de crear la tabla, la referencia no se hizo con ON DELETE CASCADE, la supresión no va a ser automática. Tenemos entonces que hacer un poco de retroingeniería para encontrar el order correcto de supresión. Para eso, el comando que sigue es muy práctico. Este permite encontrar el nombre de la tabla que nos impide suprimir. Para ejecutarla tenemos que estar conectados en modo administrador.

select owner, table_name from all_constraints where constraint_name = 'FK27B99837E9840F67'


OWNER                          TABLE_NAME
-----------------------------  ------------------------------
CMS4                          NODEVERSIONPUBLICATIONMETHOD


1 rows selected

Teniendo el nombre de la tabla, podemos ir a ella y ver cual es la columna que las une. Si solo hay esa constraint en la tabla, entonces suprimir en la tabla hija, bastará para poder ejecutar el delete inicial. Sino, debemos retener la constraint y seguir buscando las otras que lo impiden.

Categorías:Base de Datos Etiquetas:
  1. 1 agosto, 2016 a las 8:46

    Gracias, me daba problemas una FK y no sabía identificarla, pero gracias a ti lo he conseguido!

  1. No trackbacks yet.

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s

Hype Driven Development

coz' geeks love new stuff !

My experiments with SCRUM

Site to discuss Agile (Scrum, XP, etc) concepts and ideas.

CommitStrip

Mi propia cheatsheet...

Chris Aniszczyk's (zx) diatribe

work. life. open source. diatribes.

GermanTrevi

repositorio de mi mente...

A %d blogueros les gusta esto: