用觸發器來實現吧........
可以變通一下
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來判斷是否非空
check約束能加if條件的嗎???
用觸發器來實現吧.可以變通一下 create table abcd id number,type varchar2 2 schdeule id char 20 2 constraint abcd 1 foreign key schdeule id references abc a 3 constra...
DDL中的check約束學習
1.check的作用是 定義每一行必須滿足的條件。2.check約束可以有以下六種 not null 非空約束 unique 唯一約束 primary key 主鍵約束 foreign key 外來鍵約束 check 檢查約束 default 預設約束。3.check使用注意事項 不可以對以下表示式...
oracle中CHECK 約束的使用
check 約束用於限制列中的值的範圍。如果對單個列定義 check 約束,那麼該列只允許特定的值。如果對乙個表定義 check 約束,那麼此約束會基於行中其他列的值在特定的列中對值進行限制。create table 時的 sql check 約束 create table persons p id...