Oracle
 sql >> Baza danych >  >> RDS >> Oracle

Naruszono ograniczenie unikatowe ORA-00001

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


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Gdzie jest baza danych błędów Oracle?

  2. Powolna migracja do chmury

  3. Jak zainstalować Oracle SQL Developer 18.2 w systemie Windows 10?

  4. Ustawienie wartości LIMIT podczas korzystania ze zbiorczego zbierania

  5. ORA-12154 nie może rozpoznać podanego identyfikatora połączenia