Si la résolution n'est pas suffisante, vous pouvez créer un index basé sur une fonction unique.
Un exemple:
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.
Ceci est la solution décrite par Daniel. Si jamais il y a une possibilité que deux lignes sont supprimées au même moment (j'utilise uniquement la partie date ici), cette solution est assez bon:
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
Dans ce cas, utiliser une fonction unique basée indice
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.
Cordialement, Rob .
homme, j'essayais de penser à celui-ci! Merci, cela fera très bien je pense – Mark