Este error de infracción de restricción única ORA-00001 se produce cuando intenta ejecutar una instrucción INSERTAR o ACTUALIZAR que ha creado un valor duplicado en un campo restringido por un índice único.
Lista de verificación para ejecutar para resolver ORA-00001
Podemos realizar los siguientes elementos de acción para este ORA-00001
(1) Puede ver el error y encontrar la información de restricción con el siguiente sql
SELECT column_name, position FROM all_cons_columns WHERE constraint_name = '<name of the constraint in error>' AND owner = '<table owner>' AND table_name = '<table name>'
Ahora podemos verificar los datos existentes con los datos que estamos insertando y luego tomar las medidas correspondientes. Puedes cambiar las llaves para que se puedan insertar
CREATE TABLE EXAMPLE_UNIQ( EXAM_ID NUMBER NOT NULL ENABLE, EXAM_NAME VARCHAR2(250) NOT NULL ENABLE CONSTRAINT UK1_EXAMPLE UNIQUE (EXAM_ID, EXAM_NAME) ENABLE ); table created. INSERT INTO EXAMPLE_UNIQ (EXAM_ID, EXAM_NAME) VALUES (1000, 'XYZ'); 1 rows inserted. Commit; INSERT INTO EXAMPLE_UNIQ (EXAM_ID, EXAM_NAME) VALUES (1000, 'XYZ'); SQL Error: ORA-00001: unique constraint (UK1_EXAMPLE) violated Solution INSERT INTO EXAMPLE_UNIQ (EXAM_ID, EXAM_NAME) VALUES (1001, 'XYZ'); 1 rows inserted.
(2) Podemos eliminar la restricción si se permiten duplicados en la tabla
Ejemplo
alter table <table name> drop constraint <constraint name>;
(3) La sugerencia 11gr2 ignore_row_on_dupkey_index permite que la declaración ignore silenciosamente los errores ORA-00001.
- La sugerencia IGNORE_ROW_ON_DUPKEY_INDEX se diferencia de otras sugerencias en que tiene un efecto semántico. La filosofía general explicada en "Sugerencias" no se aplica a estas tres sugerencias.
- La sugerencia IGNORE_ROW_ON_DUPKEY_INDEX se aplica solo a las operaciones INSERT de una sola tabla. No se admite para las operaciones de ACTUALIZACIÓN, ELIMINACIÓN, COMBINACIÓN o inserción de varias tablas. IGNORE_ROW_ON_DUPKEY_INDEX hace que la declaración ignore una violación de clave única para un conjunto específico de columnas o para un índice específico. Cuando se encuentra una infracción de clave única, se produce una reversión a nivel de fila y la ejecución se reanuda con la siguiente fila de entrada. Si especifica esta sugerencia al insertar datos con el registro de errores DML habilitado, la infracción de clave única no se registra y no causa la finalización de la declaración.
El efecto semántico de esta sugerencia da como resultado mensajes de error si se violan reglas específicas:
- Si especifica índice, entonces el índice debe existir y ser único. De lo contrario, la sentencia provoca ORA-38913.
- Debe especificar exactamente un índice. Si no especifica ningún índice, la instrucción provoca ORA-38912. Si especifica más de un índice, la instrucción provoca ORA-38915.
- Puede especificar una sugerencia CHANGE_DUPKEY_ERROR_INDEX o IGNORE_ROW_ON_DUPKEY_INDEX en una instrucción INSERT, pero no ambas. Si especifica ambos, la declaración provoca ORA-38915.
- Al igual que con todas las sugerencias, un error de sintaxis en la sugerencia hace que se ignore silenciosamente. El resultado será que se provocará ORA-00001, como si no se hubiera utilizado ninguna pista.
insert /*+ ignore_row_on_dupkey_index(unique_table, unique_table_idx) */ into unique_table (select * from non_unique_table);
Artículos relacionados
ORA-00911:carácter no válido
ORA-03113:fin de archivo en el canal de comunicación
ORA-00257
ORA-29285:error de escritura de archivo
ORA-29913 con tablas externas
eliminar consulta en Oracle
https://docs.oracle.com/cd/E11882_01/server.112/e17766/e0.htm