Oracle
 sql >> Datenbank >  >> RDS >> Oracle

ORA-00001 Unique Constraint verletzt

ORA-00001 Unique Constraint verletzt ist eine der häufigsten Meldungen, die wir oft beim Laden von Daten erhalten.

Dieser ORA-00001-Fehler „Eindeutige Einschränkung verletzt“ tritt auf, wenn Sie versucht haben, eine INSERT- oder UPDATE-Anweisung auszuführen, die einen doppelten Wert in einem Feld erstellt hat, das durch einen eindeutigen Index eingeschränkt ist.

Checkliste zur Ausführung zur Lösung von ORA-00001

Wir können die folgenden Aktionselemente für diesen ORA-00001 ausführen

(1) Sie können sich den Fehler ansehen und die Einschränkungsinformationen mit der folgenden SQL finden

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>'

Jetzt können wir die vorhandenen Daten mit den Daten, die wir einfügen, überprüfen und dann entsprechende Maßnahmen ergreifen. Sie können die Schlüssel so ändern, dass sie eingefügt werden können

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)  Wir können die Einschränkung aufheben, wenn Duplikate in der Tabelle zulässig sind

Beispiel

alter table <table name> drop constraint <constraint name>;

(3) Der 11gr2-Hinweis ignore_row_on_dupkey_index ermöglicht es der Anweisung, ORA-00001-Fehler stillschweigend zu ignorieren.

  • Der IGNORE_ROW_ON_DUPKEY_INDEX-Hinweis unterscheidet sich von anderen Hinweisen dadurch, dass er einen semantischen Effekt hat. Die unter „Hinweise“ erläuterte allgemeine Philosophie gilt nicht für diese drei Hinweise.
  • Der Hinweis IGNORE_ROW_ON_DUPKEY_INDEX gilt nur für INSERT-Operationen für einzelne Tabellen. Es wird nicht für UPDATE-, DELETE-, MERGE- oder Einfügeoperationen für mehrere Tabellen unterstützt. IGNORE_ROW_ON_DUPKEY_INDEX bewirkt, dass die Anweisung eine eindeutige Schlüsselverletzung für einen angegebenen Satz von Spalten oder für einen angegebenen Index ignoriert. Wenn eine eindeutige Schlüsselverletzung auftritt, erfolgt ein Rollback auf Zeilenebene, und die Ausführung wird mit der nächsten Eingabezeile fortgesetzt. Wenn Sie diesen Hinweis beim Einfügen von Daten mit aktivierter DML-Fehlerprotokollierung angeben, wird die Verletzung des eindeutigen Schlüssels nicht protokolliert und führt nicht zum Abbruch der Anweisung.

Die semantische Wirkung dieses Hinweises führt zu Fehlermeldungen, wenn gegen bestimmte Regeln verstoßen wird:

  • Wenn Sie einen Index angeben, muss der Index existieren und eindeutig sein. Andernfalls verursacht die Anweisung ORA-38913.
  • Sie müssen genau einen Index angeben. Wenn Sie keinen Index angeben, verursacht die Anweisung ORA-38912. Wenn Sie mehr als einen Index angeben, verursacht die Anweisung ORA-38915.
  • Sie können in einer INSERT-Anweisung entweder einen CHANGE_DUPKEY_ERROR_INDEX- oder einen IGNORE_ROW_ON_DUPKEY_INDEX-Hinweis angeben, aber nicht beides. Wenn Sie beide angeben, verursacht die Anweisung ORA-38915.
  • Wie bei allen Hinweisen führt ein Syntaxfehler im Hinweis dazu, dass er stillschweigend ignoriert wird. Das Ergebnis wird sein, dass ORA-00001 verursacht wird, als ob kein Hinweis verwendet würde.
insert /*+ ignore_row_on_dupkey_index(unique_table, unique_table_idx) */
into
unique_table
(select * from non_unique_table);

Verwandte Artikel

ORA-00911:ungültiges Zeichen
ORA-03113:Dateiende auf Kommunikationskanal
ORA-00257
ORA-29285:Dateischreibfehler
ORA-29913 bei externen Tabellen
Abfrage in Oracle löschen
https://docs.oracle.com/cd/E11882_01/server.112/e17766/e0.htm