sql >> Databáze >  >> RDS >> Oracle

Jedinečné omezení ORA-00001 porušeno

ORA-00001 Unikátní omezení porušeno je jednou z běžných zpráv, které často dostáváme při načítání dat.

Chyba porušení jedinečného omezení ORA-00001 nastane, když jste se pokusili provést příkaz INSERT nebo UPDATE, který vytvořil duplicitní hodnotu v poli omezeném jedinečným indexem.

Zaškrtněte seznam pro spuštění k vyřešení ORA-00001

Pro tento ORA-00001

můžeme provést následující akce

(1) Můžete se podívat na chybu a najít informace o omezení pomocí níže uvedeného 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>'

Nyní můžeme zkontrolovat existující data pomocí dat, která vkládáme, a podle toho podniknout kroky. Klíče můžete změnit tak, aby je bylo možné vložit

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)  Pokud jsou v tabulce povoleny duplikáty

, můžeme omezení zrušit

Příklad

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

(3) Nápověda 11gr2 ignore_row_on_dupkey_index umožňuje příkazu tiše ignorovat chyby ORA-00001.

  • Nápověda IGNORE_ROW_ON_DUPKEY_INDEX se liší od ostatních v tom, že mají sémantický účinek. Obecná filozofie vysvětlená v „Rady“ se na tyto tři rady nevztahuje.
  • Nápověda IGNORE_ROW_ON_DUPKEY_INDEX platí pouze pro operace INSERT s jednou tabulkou. Není podporováno pro operace UPDATE, DELETE, MERGE ani operace vkládání více tabulek. IGNORE_ROW_ON_DUPKEY_INDEX způsobí, že příkaz bude ignorovat jedinečné narušení klíče pro zadanou sadu sloupců nebo pro zadaný index. Když je zjištěno jedinečné narušení klíče, dojde k vrácení na úrovni řádku a provádění bude pokračovat s dalším vstupním řádkem. Pokud zadáte tuto nápovědu při vkládání dat s povoleným protokolováním chyb DML, pak se porušení jedinečného klíče nezaprotokoluje a nezpůsobí ukončení příkazu.

Sémantický účinek této nápovědy má za následek chybové zprávy, pokud jsou porušena určitá pravidla:

  • Pokud zadáte index, musí index existovat a být jedinečný. Jinak příkaz způsobí ORA-38913.
  • Musíte zadat přesně jeden index. Pokud nezadáte žádný index, pak příkaz způsobí ORA-38912. Pokud zadáte více než jeden index, pak příkaz způsobí ORA-38915.
  • V příkazu INSERT můžete zadat nápovědu CHANGE_DUPKEY_ERROR_INDEX nebo IGNORE_ROW_ON_DUPKEY_INDEX, ale ne obojí. Pokud zadáte oba, pak příkaz způsobí ORA-38915.
  • Stejně jako u všech nápověd způsobí chyba syntaxe v nápovědě její ignorování. Výsledkem bude, že bude způsobena ORA-00001, jako by nebyla použita žádná nápověda.
insert /*+ ignore_row_on_dupkey_index(unique_table, unique_table_idx) */
into
unique_table
(select * from non_unique_table);

Související články

ORA-00911:neplatný znak
ORA-03113:konec souboru na komunikačním kanálu
ORA-00257
ORA-29285:chyba při zápisu souboru
ORA-29913 s externími tabulkami
smazat dotaz v oracle
https://docs.oracle.com/cd/E11882_01/server.112/e17766/e0.htm


  1. Kurz hodnocení hvězdičkami Jquery pomocí php a mysql

  2. Oracle PL/SQL:Dynamický příklad SQL pomocí okamžitého spuštění

  3. Dynamická alternativa k pivotu s CASE a GROUP BY

  4. Samostatný server MySQL