ORA-00001 Naruszone ograniczenie unikatowe jest jednym z typowych komunikatów, które często otrzymujemy podczas ładowania danych.
Ten błąd związany z naruszeniem ograniczenia unikatowego ORA-00001 występuje, gdy próbujesz wykonać instrukcję INSERT lub UPDATE, która utworzyła zduplikowaną wartość w polu ograniczonym unikalnym indeksem.
Lista kontrolna do uruchomienia w celu rozwiązania ORA-00001
Możemy wykonać następujące czynności dla tego ORA-00001
(1) Możesz spojrzeć na błąd i znaleźć informacje o ograniczeniu za pomocą poniższego 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>'
Teraz możemy sprawdzić istniejące dane z danymi, które wstawiamy, a następnie podjąć odpowiednie działania. Możesz zmienić klucze, aby można je było włożyć
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) Możemy usunąć ograniczenie, jeśli w tabeli dozwolone są duplikaty
Przykład
alter table <table name> drop constraint <constraint name>;
(3) Wskazówka 11gr2 ignore_row_on_dupkey_index pozwala instrukcji dyskretnie ignorować błędy ORA-00001.
- Podpowiedź IGNORE_ROW_ON_DUPKEY_INDEX różni się od innych podpowiedzi, ponieważ ma efekt semantyczny. Ogólna filozofia wyjaśniona we „Wskazówkach” nie ma zastosowania do tych trzech wskazówek.
- Wskazówka IGNORE_ROW_ON_DUPKEY_INDEX dotyczy tylko operacji INSERT na jednej tabeli. Nie jest obsługiwana w przypadku operacji UPDATE, DELETE, MERGE ani wielotabelowych operacji wstawiania. IGNORE_ROW_ON_DUPKEY_INDEX powoduje, że instrukcja ignoruje unikatowe naruszenie klucza dla określonego zestawu kolumn lub dla określonego indeksu. W przypadku napotkania naruszenia unikatowego klucza następuje wycofanie na poziomie wiersza i wykonanie jest wznawiane od następnego wiersza wejściowego. Jeśli określisz tę wskazówkę podczas wstawiania danych z włączonym rejestrowaniem błędów DML, naruszenie unikatowego klucza nie jest rejestrowane i nie powoduje zakończenia instrukcji.
Efekt semantyczny tej wskazówki powoduje wyświetlenie komunikatów o błędach w przypadku naruszenia określonych reguł:
- Jeśli określisz indeks, indeks musi istnieć i być unikalny. W przeciwnym razie oświadczenie powoduje ORA-38913.
- Musisz określić dokładnie jeden indeks. Jeśli nie określisz żadnego indeksu, wówczas instrukcja powoduje ORA-38912. Jeśli podasz więcej niż jeden indeks, to oświadczenie powoduje ORA-38915.
- W instrukcji INSERT można określić wskazówkę CHANGE_DUPKEY_ERROR_INDEX lub IGNORE_ROW_ON_DUPKEY_INDEX, ale nie obie. Jeśli określisz oba, wówczas oświadczenie powoduje ORA-38915.
- Tak jak w przypadku wszystkich wskazówek, błąd składni w podpowiedzi powoduje, że jest ona po cichu ignorowana. Rezultatem będzie wywołanie ORA-00001, tak jakby nie użyto żadnej podpowiedzi.
insert /*+ ignore_row_on_dupkey_index(unique_table, unique_table_idx) */ into unique_table (select * from non_unique_table);
Powiązane artykuły
ORA-00911:nieprawidłowy znak
ORA-03113:koniec pliku w kanale komunikacyjnym
ORA-00257
ORA-29285:błąd zapisu pliku
ORA-29913 z tabelami zewnętrznymi
usuń zapytanie w oracle
https://docs.oracle.com/cd/E11882_01/server.112/e17766/e0.htm