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-02291
Aprenda por qué y cómo resolver los mensajes de error ORA-02291 en Oracle.
describir
Cuando encuentra un error ORA-02291, aparece el siguiente mensaje de error:
- ORA-02291: violación de restricción de integridad <约束名称> – clave principal no encontrada
razón
Intentó hacer referencia a una tabla usando una clave principal o única, pero la columna que enumeró no coincide con la clave principal o no existe una clave principal para esta tabla.
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 insertar un valor en la tabla secundaria, pero el valor correspondiente no existe en la tabla principal.
Para corregir esto, debe insertar valores en la tabla principal antes de insertar los valores correspondientes en la tabla secundaria.
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 products (product_id, supplier_id) VALUES (1001, 5000);
Recibirá el siguiente mensaje de error:
Dado que el valor 5000 de id_proveedor aún no existe en la tabla de proveedores, primero se debe insertar un registro en la tabla de proveedores, de la siguiente manera:
INSERT INTO supplier (supplier_id, supplier_name, contact_name) VALUES (5000, 'Microsoft', 'Bill Gates');
Luego puede insertar en la tabla de productos:
INSERT INTO products (product_id, supplier_id) VALUES (1001, 5000);