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