Oracle
 sql >> Base de données >  >> RDS >> Oracle

Impossible de valider, avec l'option novalidate

Vous ne pouvez pas avoir de valeurs non uniques avec un index unique. Mais vous pouvez avoir des valeurs non uniques avec une contrainte unique qui est appliquée par un index non unique. Même si vous avez initialement créé un index non unique, le drop index et enable la syntaxe essaiera de recréer un index unique à moins que vous ne fournissiez plus de détails dans le using index rubrique.

Par exemple :

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