Oracle
 sql >> база данни >  >> RDS >> Oracle

Уникалното ограничение ORA-00001 е нарушено

ORA-00001 нарушение на уникалното ограничение е едно от често срещаните съобщения, които често получаваме при зареждане на данни.

Тази грешка при нарушаване на уникално ограничение ORA-00001 възниква, когато вие сте се опитали да изпълните израз INSERT или UPDATE, който е създал дублирана стойност в поле, ограничено от уникален индекс.

Проверете списък за изпълнение, за да разрешите ORA-00001

Можем да извършим следните действия за този ORA-00001

(1) Можете да разгледате грешката и да намерите информацията за ограничението с помощта на 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>'

Сега можем да проверим съществуващите данни с данните, които вмъкваме и след това да предприемем съответните действия. Можете да промените клавишите, така че да могат да бъдат поставени

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)  Можем да премахнем ограничението, ако в таблицата са разрешени дубликати

Пример

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

(3) Намекът 11gr2 ignore_row_on_dupkey_index позволява на оператора тихо да игнорира грешки ORA-00001.

  • Намекът IGNORE_ROW_ON_DUPKEY_INDEX е различен от другите съвети, тъй като имат семантичен ефект. Общата философия, обяснена в „Съвети“, не важи за тези три съвета.
  • Намекът IGNORE_ROW_ON_DUPKEY_INDEX се прилага само за операции INSERT с една таблица. Не се поддържа за операции UPDATE, DELETE, MERGE или многотаблици. IGNORE_ROW_ON_DUPKEY_INDEX кара оператора да игнорира нарушение на уникален ключ за определен набор от колони или за определен индекс. Когато се срещне нарушение на уникален ключ, се случва връщане назад на ниво ред и изпълнението се възобновява със следващия входен ред. Ако посочите този намек при вмъкване на данни с активирано регистриране на грешки в DML, тогава нарушението на уникалния ключ не се регистрира и не води до прекратяване на израза.

Семантичният ефект на този намек води до съобщения за грешка, ако са нарушени конкретни правила:

  • Ако посочите индекс, тогава индексът трябва да съществува и да е уникален. В противен случай изявлението причинява ORA-38913.
  • Трябва да посочите точно един индекс. Ако не посочите индекс, тогава изразът причинява ORA-38912. Ако посочите повече от един индекс, тогава изразът причинява ORA-38915.
  • Можете да посочите или CHANGE_DUPKEY_ERROR_INDEX, или IGNORE_ROW_ON_DUPKEY_INDEX намек в израз INSERT, но не и двете. Ако посочите и двете, тогава изразът причинява ORA-38915.
  • Както при всички подсказки, синтактична грешка в намекната кара да бъде игнориран тихо. Резултатът ще бъде, че ORA-00001 ще бъде причинен, точно както ако не беше използван намек.
insert /*+ ignore_row_on_dupkey_index(unique_table, unique_table_idx) */
into
unique_table
(select * from non_unique_table);

Сродни статии

ORA-00911:невалиден знак
ORA-03113:край на файла на комуникационен канал
ORA-00257
ORA-29285:грешка при запис на файл
ORA-29913 с външни таблици
изтрийте заявка в oracle
https://docs.oracle.com/cd/E11882_01/server.112/e17766/e0.htm


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Експортирайте данни в JSON файл в Oracle 11g с помощта на PL/SQL

  2. Инструкции стъпка по стъпка за инсталиране на Oracle Virtual Box

  3. PL/SQL онлайн MCQ тест

  4. Достъп до таблицата на друг потребител в рамките на съхранена процедура на Oracle

  5. Enterprise Manager 11g FMW Control в R12.2