首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Oracle:如何在以下情况下使用case制定复杂的约束

Oracle:如何在以下情况下使用case制定复杂的约束
EN

Stack Overflow用户
提问于 2012-05-23 16:19:54
回答 3查看 12.3K关注 0票数 4

下面的条件约束根本不起作用。有没有可能以一种可行的方式来制定?

代码语言:javascript
复制
ALTER TABLE eni_trasc_voci_pwr_fatt
ADD CONSTRAINT tvp_constraint_1 CHECK (
CASE WHEN TVP_CODICE_ASSOGGETAMEN = '-' THEN tvp_regione IS NULL
END);
EN

回答 3

Stack Overflow用户

发布于 2012-05-23 16:26:08

尝试以下操作:

代码语言:javascript
复制
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);
票数 6
EN

Stack Overflow用户

发布于 2012-05-23 16:28:22

看起来你想要这里的逻辑蕴含(“如果X那么Y"),这在逻辑上等同于”(不是X)或Y“。CASE用于创建有限映射。

你的约束应该是这样的

TVP_CODICE_ASSOGGETAMEN != '-' OR TVP_REGIONE IS NULL

票数 3
EN

Stack Overflow用户

发布于 2012-05-23 16:36:22

我认为你可以不使用case语句来做你想做的事情:

代码语言:javascript
复制
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) );

现在尝试插入一些值:

代码语言:javascript
复制
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.
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10716077

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档