И если разрешение недостаточно, то вы можете создать уникальный индекс, основанный на функциях.
Пример:
SQL> create table t (id,col,deleted_date)
2 as
3 select 1, 99, null from dual union all
4 select 2, 99, date '2009-06-22' from dual
5/
Tabel is aangemaakt.
SQL> alter table t add constraint t_pk primary key (id)
2/
Tabel is gewijzigd.
SQL> alter table t add constraint t_uk1 unique (col,deleted_date)
2/
Tabel is gewijzigd.
Это решение описывается Daniel. Если когда-либо вероятность того, что две строки будут удалены в то же самое время (я использую только часть даты здесь), это решение не является достаточно хорошим:
SQL> insert into t values (3, 99, date '2009-06-22')
2/
insert into t values (3, 99, date '2009-06-22')
*
FOUT in regel 1:
.ORA-00001: unique constraint (RWK.T_UK1) violated
В этом случае используют уникальную функцию, основанную индекс:
SQL> alter table t drop constraint t_uk1
2/
Tabel is gewijzigd.
SQL> create unique index i1 on t (nvl2(deleted_date,null,col))
2/
Index is aangemaakt.
SQL> insert into t values (3, 99, date '2009-06-22')
2/
1 rij is aangemaakt.
С уважением, Роб.
человек, я пытался задуматься об этом! Спасибо, это будет прекрасно. Я думаю, – Mark