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

Не може да се потвърди, с опция за новалидиране

Не можете да имате неуникални стойности с уникален индекс. Но можете да имате неуникални стойности с уникално ограничение, което се налага от неуникален индекс. Дори ако първоначално сте създали неуникален индекс, drop index и enable синтаксисът ще се опита да създаде отново уникален индекс, освен ако не предоставите повече подробности в using index раздел.

Например:

SQL> create table my_table(my_column number,
  2     constraint my_constraint unique (my_column));

Table created.

SQL> alter table my_table disable constraint my_constraint drop index;

Table altered.

SQL> insert into my_table select 1 from dual union all select 1 from dual;

2 rows created.

SQL> alter table my_table enable novalidate constraint my_constraint;
alter table my_table enable novalidate constraint my_constraint
*
ERROR at line 1:
ORA-02299: cannot validate (USER.MY_CONSTRAINT) - duplicate keys found


SQL> alter table my_table enable novalidate constraint my_constraint
  2     using index (create index my_index on my_table(my_column));

Table altered.

SQL> --The constraint is enforced, even though other rows violate it.
SQL> insert into my_table values(1);
insert into my_table values(1)
*
ERROR at line 1:
ORA-00001: unique constraint (USER.MY_CONSTRAINT) violated


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Лабиринтът за настройка на производителността

  2. Какъв е ефектът от поставянето на комит след DML в процедура?

  3. Каква е разликата между неповтарящо се четене и фантомно четене?

  4. ORA-04091:таблицата [blah] мутира, тригерът/функцията може да не я види

  5. Пакетно вмъкване/актуализация на MyBatis за Oracle