问题描述
如何为列(1)创建约束,该约束检查另一个列(2)中的值并且等于'String1'和'String2'但不等于'String3',因此将column(1)设置为not空值 这是我到目前为止尝试过的
Create Table ER(ERNo INTEGER,ERSta Varchar2(8 CHAR) Default 'PENDING' Not Null,AUserNo Integer,CONSTRAINT ERnopK PRIMARY KEY(ERNO),CONSTRAINT ERSta_check CHECK (ERSta IN ('PENDING','APPROVED','DENIED')),CONSTRAINT AUserNoFK FOREIGN KEY (AUserNo) REFERENCES Users(UserNo),CONSTRAINT AUserNo CHECK (WHEN (ERSta like('APPROVED')or ('DENIED')) THEN AUserNo not null);
所以我的问题是:由于AuserNo已经允许空值,当在ERSta中输入“ APPROVED”或“ DENIED”时,如何将AUserNo设置为不为空?
预先感谢您的帮助。
解决方法
check (ERSta NOT IN ('APPROVED','DENIED') or AUserNo is not null)
-
如果ERSta是除APPROVED / DENIED之外的另一个值,则将执行check子句。
-
如果ERSta被批准或拒绝,则AUserNo必须不为空。