sql >> Database teknologi >  >> RDS >> Oracle

Kan ikke validere, med novalidate mulighed

Du kan ikke have ikke-unikke værdier med et unikt indeks. Men du kan have ikke-unikke værdier med en unik begrænsning, der håndhæves af et ikke-unik indeks. Selvom du oprindeligt oprettede et ikke-unik indeks, drop index og enable syntaks vil forsøge at genskabe et unikt indeks, medmindre du angiver flere detaljer i using index afsnit.

For eksempel:

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. SQLiteConstraintException-fejl vises efter start af hver aktivitet

  2. Synkroniser offline SQLite-database med online MySQL-database

  3. Sådan udføres en procedure inde i en pakke i Oracle

  4. SQL WHERE-erklæring