Oracle SQL中如何添加OR逻辑非空约束:需填个人或工作号码
Oracle SQL实现“二选一非空”约束的正确方法
你原来的语句错误原因:MODIFY子句只能给单个列添加NOT NULL列级约束,无法实现跨列的OR逻辑判断,因此触发ORA-00907语法错误。要实现“个人号码或工作号码至少填写其一”的需求,需要使用CHECK表级约束。
正确语句示例
推荐:添加命名约束(便于后续维护)
ALTER TABLE user_data ADD CONSTRAINT chk_user_number_required CHECK (personal_number IS NOT NULL OR work_number IS NOT NULL);
简化:添加匿名约束(不推荐,不利于后续管理)
ALTER TABLE user_data ADD CHECK (personal_number IS NOT NULL OR work_number IS NOT NULL);
注意事项
- 约束生效后,插入或更新记录时如果
personal_number和work_number同时为空,Oracle会抛出违反约束的错误。 - 若字段类型为
CHAR,Oracle会将空字符串('')视为NULL,无需额外处理空字符串的情况。
内容的提问来源于stack exchange,提问作者SunnyDays
相关产品推荐
相关产品推荐

