Je pense que vous pouvez faire ce que vous voulez sans la déclaration de cas:
create table t1 (c1 varchar2(10), c2 varchar2(10));
alter table t1 add constraint t1_chk1 check ((c1 = '-' and c2 is null) or (c1 != '-' and c2 is not null));
maintenant essayer d'insérer des valeurs:
SQL> insert into t1 values ('-', 'reject');
insert into t1 values ('-', 'reject')
*
ERROR at line 1:
ORA-02290: check constraint (SODONNEL.T1_CHK1) violated
SQL>
SQL> insert into t1 values ('-', null);
1 row created.
SQL>
SQL> insert into t1 values ('a', null);
insert into t1 values ('a', null)
*
ERROR at line 1:
ORA-02290: check constraint (SODONNEL.T1_CHK1) violated
SQL>
SQL> insert into t1 values ('a', 'accept');
1 row created.
+1. Vous pouvez le rendre encore plus court en supprimant 'else null'. –
Vous avez raison. Mais mon intention était de décrire un "Case when" -Statement complet, parce que celui-là dans la question était totalement faux. – int2000