回答

收藏

ORACLE约束以允许Null值,IF

技术问答 技术问答 220 人阅读 | 0 人回复 | 2023-09-13

这是我第一次使用它oracle,我有个名字ExpenseReport该表存储关于费用的详细信息。
/ x" q" X; {& f9 r+ b- c% i我希望Null允许ApprUserNo,如果ERStatus =’PENDING’,我一直在努力整理整个上午。
* l# [* I  k7 F* r6 C$ v. N% R  y$ tCREATE TABLE ExpenseReport (  ERNo           NUMBER(10) NOT NULL, ERDesc         VARCHAR2(255) NOT NULL, ERSubmitDate   DATE NOT NULL, ERStatusDate   DATE NOT NULL, ERStatus       VARCHAR2(8) DEFAULT 'PENDING' NOT NULL, SubmitUserNo   NUMBER(10) NOT NULL, ApprUserNo     NUMBER(10) NOT NULL CONSTRAINT BEN_Check CHECK (ERStatus LIKE('PENDING')), UsersUserNo    NUMBER(10) NOT NULL, AssetAssetNo   NUMBER(10) NOT NULL,    PRIMARY KEY (ERNo), CONSTRAINT Check_ER_Date CHECK (ERStatusDate >= ERSubmitDate), CONSTRAINT ERStatus_Null_Exception CHECK (IF ERStatus = 'PENDING',AppUserNo = NULLABLE), CONSTRAINT ERStatus_Option CHECK (ERStatus = 'PENDING','APPROBED','DENIED)               
5 M* ]- u$ K5 ]7 `7 S- W3 N& w    解决方案:                                                               
2 ^+ i5 {/ H- K& M0 Q9 Y, `                                                                你需要重新形成约束。2 k! e) w: ^1 x) Q. ]
首先,如果你想在不考虑任何其他规则的情况下保留一个字段的空值,那么这个字段必须是空字段。% E, m/ A% }4 q9 l
ApprUserNo     NUMBER(10)   NULL,  -- No Check Constrain其次,创造一个约束,谈谈ApprUserNo不能为NULL,除非 ErStatus = 'PENDING'
$ p: m, A! j% P% R4 f' |7 e4 fCONSTRAINT ERStatus_Null_Exception CHECK (AppUserNo IS NOT NULL OR ERStatus = 'PENDING
分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则