sql >> Database >  >> RDS >> Oracle

ORA-00001 unieke beperking geschonden

ORA-00001 unieke beperking geschonden is een van de meest voorkomende berichten die we vaak krijgen tijdens het laden van gegevens.

Deze ORA-00001 unieke beperking geschonden fout treedt op wanneer u probeerde een INSERT- of UPDATE-instructie uit te voeren die een dubbele waarde heeft gecreëerd in een veld dat is beperkt door een unieke index.

Checklijst die moet worden uitgevoerd om ORA-00001 op te lossen

We kunnen de volgende actiepunten uitvoeren voor deze ORA-00001

(1) U kunt de fout bekijken en de beperkingsinformatie vinden met de onderstaande 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>'

Nu kunnen we de bestaande gegevens controleren met de gegevens die we invoegen en dienovereenkomstig actie ondernemen. U kunt de toetsen wijzigen zodat ze kunnen worden ingevoegd

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)  We kunnen de beperking laten vallen als duplicaten zijn toegestaan ​​in de tabel

Voorbeeld

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

(3) Met de 11gr2-hint negeer_row_on_dupkey_index kan de instructie ORA-00001-fouten stilzwijgend negeren.

  • De IGNORE_ROW_ON_DUPKEY_INDEX hint is anders dan andere hints omdat ze een semantisch effect hebben. De algemene filosofie die wordt uitgelegd in "Hints" is niet van toepassing op deze drie hints.
  • De IGNORE_ROW_ON_DUPKEY_INDEX hint is alleen van toepassing op INSERT-bewerkingen met één tabel. Het wordt niet ondersteund voor UPDATE-, DELETE-, MERGE- of multitable-invoegbewerkingen. IGNORE_ROW_ON_DUPKEY_INDEX zorgt ervoor dat de instructie een unieke sleutelovertreding negeert voor een opgegeven set kolommen of voor een opgegeven index. Wanneer een unieke sleutelovertreding wordt aangetroffen, vindt een rollback op rijniveau plaats en wordt de uitvoering hervat met de volgende invoerrij. Als u deze hint opgeeft bij het invoegen van gegevens terwijl DML-foutlogboekregistratie is ingeschakeld, wordt de schending van de unieke sleutel niet geregistreerd en wordt de instructie niet beëindigd.

Het semantische effect van deze hint resulteert in foutmeldingen als bepaalde regels worden overtreden:

  • Als u index opgeeft, moet de index bestaan ​​en uniek zijn. Anders veroorzaakt de instructie ORA-38913.
  • Je moet precies één index opgeven. Als u geen index opgeeft, veroorzaakt de instructie ORA-38912. Als u meer dan één index opgeeft, veroorzaakt de instructie ORA-38915.
  • Je kunt een hint CHANGE_DUPKEY_ERROR_INDEX of IGNORE_ROW_ON_DUPKEY_INDEX opgeven in een INSERT-instructie, maar niet beide. Als u beide specificeert, veroorzaakt de instructie ORA-38915.
  • Zoals bij alle hints zorgt een syntaxisfout in de hint ervoor dat deze stil wordt genegeerd. Het resultaat is dat ORA-00001 wordt veroorzaakt, net alsof er geen hint is gebruikt.
insert /*+ ignore_row_on_dupkey_index(unique_table, unique_table_idx) */
into
unique_table
(select * from non_unique_table);

Gerelateerde artikelen

ORA-00911:ongeldig teken
ORA-03113:einde bestand op communicatiekanaal
ORA-00257
ORA-29285:schrijffout bestand
ORA-29913 met externe tabellen
query verwijderen in oracle
https://docs.oracle.com/cd/E11882_01/server.112/e17766/e0.htm


  1. Taal wijzigen van systeem- en foutmeldingen in PostgreSQL

  2. Verwijder dubbele rijen in MySQL (negert primaire sleutel)

  3. Lijst van alle identiteitskolommen in een SQL Server-database:sys.identity_columns

  4. Android SQLite-probleem - tabel ... heeft geen kolom met de naam