ORA-00001 restrição exclusiva violada é uma das mensagens comuns que recebemos frequentemente ao carregar dados.
Esse erro de violação de restrição exclusiva ORA-00001 ocorre quando você tenta executar uma instrução INSERT ou UPDATE que criou um valor duplicado em um campo restrito por um índice exclusivo.
Lista de verificação a ser executada para resolver ORA-00001
Podemos executar os seguintes itens de ação para este ORA-00001
(1) Você pode olhar para o erro e encontrar as informações de restrição com o sql abaixo
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>'
Agora podemos verificar os dados existentes com os dados que estamos inserindo e agir de acordo. Você pode alterar as chaves para que elas possam ser inseridas
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 a restrição se forem permitidas duplicatas na tabela
Exemplo
alter table <table name> drop constraint <constraint name>;
(3) A dica 11gr2 ignore_row_on_dupkey_index permite que a instrução ignore silenciosamente os erros ORA-00001.
- A dica IGNORE_ROW_ON_DUPKEY_INDEX é diferente de outras dicas porque tem um efeito semântico. A filosofia geral explicada em "Dicas" não se aplica a essas três dicas.
- A dica IGNORE_ROW_ON_DUPKEY_INDEX se aplica apenas a operações INSERT de tabela única. Não há suporte para operações UPDATE, DELETE, MERGE ou inserção de várias tabelas. IGNORE_ROW_ON_DUPKEY_INDEX faz com que a instrução ignore uma violação de chave exclusiva para um conjunto especificado de colunas ou para um índice especificado. Quando uma violação de chave exclusiva é encontrada, ocorre uma reversão em nível de linha e a execução é retomada com a próxima linha de entrada. Se você especificar essa dica ao inserir dados com o registro de erros DML ativado, a violação de chave exclusiva não será registrada e não causará o encerramento da instrução.
O efeito semântico dessa dica resulta em mensagens de erro se regras específicas forem violadas:
- Se você especificar o índice, o índice deverá existir e ser exclusivo. Caso contrário, a instrução causa ORA-38913.
- Você deve especificar exatamente um índice. Se você não especificar nenhum índice, a instrução causará ORA-38912. Se você especificar mais de um índice, a instrução causará ORA-38915.
- Você pode especificar uma dica CHANGE_DUPKEY_ERROR_INDEX ou IGNORE_ROW_ON_DUPKEY_INDEX em uma instrução INSERT, mas não ambas. Se você especificar ambos, a instrução causará ORA-38915.
- Como em todas as dicas, um erro de sintaxe na dica faz com que ela seja ignorada silenciosamente. O resultado será que ORA-00001 será causado, como se nenhuma dica fosse usada.
insert /*+ ignore_row_on_dupkey_index(unique_table, unique_table_idx) */ into unique_table (select * from non_unique_table);
Artigos relacionados
ORA-00911:caractere inválido
ORA-03113:fim de arquivo no canal de comunicação
ORA-00257
ORA-29285:erro de gravação de arquivo
ORA-29913 com tabelas externas
excluir consulta no oracle
https://docs.oracle.com/cd/E11882_01/server.112/e17766/e0.htm