请教大侠下,对一张表添加约束,能带有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来判断是否非空
若type不是'aa',则取'1',这个'1'也可以用其他的非空字符代替,类型要与else前取的schdeule_id一致,使非空判断恒成立
若type 为'aa',则用schdeule_id来判断是否非空