Ben*_*lan 3 sql oracle oracle10g oracle11g
我是第一次使用oracle,我有一个名为ExpenseReport的表,它存储有关费用的详细信息.
我希望Nulls被允许用于ApprUserNo如果ERStatus ='PENDING'任何帮助将不胜感激,我一直试图整理这个早上
CREATE 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')
)
Run Code Online (Sandbox Code Playgroud)
您需要重新构建约束.
首先,如果您希望字段保存空值,而不管其他任何规则,它必须是可空字段.
ApprUserNo NUMBER(10) NULL, -- No Check Constrain
Run Code Online (Sandbox Code Playgroud)
其次,创建一个约束,表示ApprUserNo不能为NULL,除非 ErStatus = 'PENDING'
CONSTRAINT ERStatus_Null_Exception CHECK (AppUserNo IS NOT NULL OR ERStatus = 'PENDING'),
Run Code Online (Sandbox Code Playgroud)