sql >> Database teknologi >  >> RDS >> Oracle

ORA-00001 unik begrænsning overtrådt

ORA-00001 unik begrænsning overtrådt er en af ​​de almindelige beskeder, vi ofte får under indlæsning af data.

Denne ORA-00001 unikke begrænsning overtrådte fejl opstår, når Du forsøgte at udføre en INSERT- eller UPDATE-sætning, der har skabt en dubletværdi i et felt, der er begrænset af et unikt indeks.

Tjek liste for at køre for at løse ORA-00001

Vi kan udføre følgende handlingspunkter for denne ORA-00001

(1) Du kan se på fejlen og finde begrænsningsoplysningerne med nedenstående 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 kan vi kontrollere de eksisterende data med de data, vi indsætter og derefter handle i overensstemmelse hermed. Du kan ændre nøglerne, så de kan indsættes

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)  Vi kan droppe begrænsningen, hvis dubletter er tilladt i tabellen

Eksempel

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

(3) 11gr2-tipet ignore_row_on_dupkey_index tillader sætningen at ignorere ORA-00001-fejl.

  • IGNORE_ROW_ON_DUPKEY_INDEX-hintet er ulig andre hints, idet de har en semantisk effekt. Den generelle filosofi, der er forklaret i "Hints", gælder ikke for disse tre hints.
  • IGNORE_ROW_ON_DUPKEY_INDEX-tippet gælder kun for enkelt-tabel INSERT-operationer. Det er ikke understøttet til OPDATERING, SLET, FLÉT eller multitable-indsættelsesoperationer. IGNORE_ROW_ON_DUPKEY_INDEX får sætningen til at ignorere en unik nøgleovertrædelse for et specificeret sæt kolonner eller for et specificeret indeks. Når der stødes på en unik nøgleovertrædelse, sker der en tilbagerulning på rækkeniveau, og udførelsen genoptages med den næste inputrække. Hvis du angiver dette tip, når du indsætter data med DML-fejllogning aktiveret, logges den unikke nøgleovertrædelse ikke og forårsager ikke opsigelse af erklæringen.

Den semantiske effekt af dette tip resulterer i fejlmeddelelser, hvis specifikke regler overtrædes:

  • Hvis du angiver indeks, skal indekset eksistere og være unikt. Ellers forårsager erklæringen ORA-38913.
  • Du skal angive nøjagtigt ét indeks. Hvis du ikke angiver noget indeks, forårsager sætningen ORA-38912. Hvis du angiver mere end ét indeks, forårsager sætningen ORA-38915.
  • Du kan angive enten et CHANGE_DUPKEY_ERROR_INDEX- eller IGNORE_ROW_ON_DUPKEY_INDEX-tip i en INSERT-sætning, men ikke begge. Hvis du angiver begge dele, forårsager sætningen ORA-38915.
  • Som med alle hints, får en syntaksfejl i hintet det til at ignoreres stille. Resultatet vil være, at ORA-00001 vil blive forårsaget, ligesom hvis der ikke blev brugt noget tip.
insert /*+ ignore_row_on_dupkey_index(unique_table, unique_table_idx) */
into
unique_table
(select * from non_unique_table);

Relaterede artikler

ORA-00911:ugyldigt tegn
ORA-03113:slutningen af ​​filen på kommunikationskanalen
ORA-00257
ORA-29285:filskrivefejl
ORA-29913 med eksterne tabeller
slet forespørgsel i oracle
https://docs.oracle.com/cd/E11882_01/server.112/e17766/e0.htm


  1. Brug af ORDER BY og GROUP BY sammen

  2. pyodbc.connect() virker, men ikke sqlalchemy.create_engine().connect()

  3. Bruger EXCEPT-klausulen i PostgreSQL

  4. REMAINDER() Funktion i Oracle