check约束能加if条件的吗???

请教大侠下,对一张表添加约束,能带有if条件的吗?比如:表AA,有其中字段type,外键schdeule_id,如果type有添加约束只能是'aa','bb','cc',然后如果type='aa'时,那么外键schdeule_id不能为空,如果是'bb','cc'那就可以为空,这样现在添加约束,谢谢大家了,我查了很多都没有这样的,希望有写过的能帮写下,谢谢了,在线等

用触发器来实现吧........

可以变通一下

create table abcd(id number,type varchar2(2),schdeule_id char(20),
  2    constraint abcd_1 foreign key(schdeule_id) references abc(a),
  3    constraint abcd_2 check(type in ('aa','bb','cc') and case type when 'aa' then schdeule_id else '1' end is not null));
 
Table created
 
SQL> insert into abcd values(1,'dd',null);
 
insert into abcd values(1,'dd',null)
 
ORA-02290: 违反检查约束条件 (W.ABCD_2)
 
SQL> insert into abcd values(1,'bb',null);
 
1 row inserted
 
SQL> insert into abcd values(2,'aa',null);
 
insert into abcd values(2,'aa',null)
 
ORA-02290: 违反检查约束条件 (W.ABCD_2)
 
SQL> insert into abcd values(3,'aa','2');
 
1 row inserted
 
SQL> insert into abcd values(4,'aa','123');
 
insert into abcd values(4,'aa','123')
 
ORA-02291: 违反完整约束条件 (W.ABCD_1) - 未找到父项关键字

else '1' end is not null的else '1' end是什么意思呢!

if是pl/sql里的语法,sql中要用case
若type不是'aa',则取'1',这个'1'也可以用其他的非空字符代替,类型要与else前取的schdeule_id一致,使非空判断恒成立
若type 为'aa',则用schdeule_id来判断是否非空


  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值