Oracle/PLSQL: mensaje de error ORA-02292

Los datos expuestos en este blog, son solo de índole informativo. Por favor realiza siempre una copia de seguridad antes de realizar cualquier cambio en tu proyecto.

Oracle/PLSQL: mensaje de error ORA-02292

Aprenda por qué y cómo resolver los mensajes de error ORA-02292 en Oracle.

describir

Cuando encuentra un error ORA-02292, aparece el siguiente mensaje de error:

  • ORA-02292: restricción de integridad violada <约束名称> – encontrar sub-registros

razón

Está intentando eliminar un registro (al que hace referencia una clave externa) de una tabla principal, pero existe un registro en la tabla secundaria.

resolver

Las opciones para resolver este error de Oracle incluyen:

Opción 1

Este error generalmente ocurre cuando tiene una relación padre-hijo entre dos tablas a través de claves externas. Luego intenta eliminar un valor en la tabla principal, pero el valor correspondiente existe en la tabla secundaria.

Para solucionar esto, debe actualizar o eliminar el valor en la tabla secundaria antes de poder eliminar el valor correspondiente en la tabla principal.

Por ejemplo, si creó las siguientes claves externas (relación padre-hijo).

CREATE TABLE supplier
( supplier_id numeric(10) not null,
  supplier_name varchar2(50) not null,
  contact_name varchar2(50),
  CONSTRAINT supplier_pk PRIMARY KEY (supplier_id)
);

CREATE TABLE products
( product_id numeric(10) not null,
  supplier_id numeric(10) not null,
  CONSTRAINT fk_supplier
    FOREIGN KEY (supplier_id)
    REFERENCES supplier (supplier_id)
);

Luego intenta insertar en la tabla de productos de esta manera:

INSERT INTO supplier
(supplier_id, supplier_name, contact_name)
VALUES (1000, 'Microsoft', 'Bill Gates');

INSERT INTO products
(product_id, supplier_id)
VALUES (50000, 1000);

Luego intenta eliminar registros de la tabla de proveedores de esta manera:

DELETE from supplier
WHERE supplier_id = 1000;

Recibirá el siguiente mensaje de error:

Dado que hay un valor de id_proveedor de 100 en los productos, primero debe eliminar el registro de la tabla de productos, de la siguiente manera:

DELETE from products
WHERE supplier_id = 1000;

Luego puede eliminar de la tabla de proveedores:

DELETE from supplier
WHERE supplier_id = 1000;
(Visited 21 times, 1 visits today)