下面的条件约束根本不起作用。有没有可能以一种可行的方式来制定?
ALTER TABLE eni_trasc_voci_pwr_fatt
ADD CONSTRAINT tvp_constraint_1 CHECK (
CASE WHEN TVP_CODICE_ASSOGGETAMEN = '-' THEN tvp_regione IS NULL
END);发布于 2012-05-23 16:26:08
尝试以下操作:
ALTER TABLE eni_trasc_voci_pwr_fatt
ADD CONSTRAINT tvp_constraint_1 CHECK (
CASE WHEN TVP_CODICE_ASSOGGETAMEN = '-' THEN tvp_regione else null end IS NULL);发布于 2012-05-23 16:28:22
看起来你想要这里的逻辑蕴含(“如果X那么Y"),这在逻辑上等同于”(不是X)或Y“。CASE用于创建有限映射。
你的约束应该是这样的
TVP_CODICE_ASSOGGETAMEN != '-' OR TVP_REGIONE IS NULL
发布于 2012-05-23 16:36:22
我认为你可以不使用case语句来做你想做的事情:
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) );现在尝试插入一些值:
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.https://stackoverflow.com/questions/10716077
复制相似问题