问题描述
嗨,
我有一个表,我需要任何一列不为null,这意味着在任何时间点,只有这些列中的一个应该有一个值,而另一个应该为null。
我试过下面:
我仍然能够在两列中插入值,这不是我的要求。
我正在考虑触发器,并且还看到触发器可能会减慢插入速度。
任何帮助将不胜感激。
-谢谢
我有一个表,我需要任何一列不为null,这意味着在任何时间点,只有这些列中的一个应该有一个值,而另一个应该为null。
我试过下面:
CREATE TABLE "BCKC"."TEST" ( "ID" NUMBER(9,0), "TEXT" VARCHAR2(7), "ADR" VARCHAR2(4), CONSTRAINT "L_COL_CHK" CHECK ( text IS NOT NULL OR adr IS NOT NULL) ENABLE ) ; INSERT INTO test values(1,'er','nzb'); INSERT INTO test values(1,'er','nzb');复制
我仍然能够在两列中插入值,这不是我的要求。
我正在考虑触发器,并且还看到触发器可能会减慢插入速度。
任何帮助将不胜感激。
-谢谢
专家解答
所以你在找一个独家的还是?
您的约束检查至少有一个不为null。要确保只有一个是空,你还需要测试另一个是空:
您的约束检查至少有一个不为null。要确保只有一个是空,你还需要测试另一个是空:
CREATE TABLE TEST ( ID NUMBER(9,0), TEXT VARCHAR2(7), ADR VARCHAR2(4), CONSTRAINT L_COL_CHK CHECK ( ( text IS NOT NULL AND adr IS NULL ) OR ( text IS NULL AND adr IS NOT NULL ) ) ) ; INSERT INTO test VALUES ( 1,'er','nzb' ); ORA-02290: check constraint (CHRIS.L_COL_CHK) violated INSERT INTO test VALUES ( 2,'er',NULL ); INSERT INTO test VALUES ( 3,NULL,'nzb' ); INSERT INTO test VALUES ( 4,NULL,NULL ); ORA-02290: check constraint (CHRIS.L_COL_CHK) violated select * from test; ID TEXT ADR 2 er3 nzb 复制
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。
评论
相关阅读
Oracle RAC ASM 磁盘组满了,无法扩容怎么在线处理?
Lucifer三思而后行
935次阅读
2025-03-17 11:33:53
Oracle DataGuard高可用性解决方案详解
孙莹
396次阅读
2025-03-26 23:27:33
墨天轮个人数说知识点合集
JiekeXu
338次阅读
2025-04-01 15:56:03
XTTS跨版本迁移升级方案(11g to 19c RAC for Linux)
zwtian
328次阅读
2025-04-08 09:12:48
Oracle SQL 执行计划分析与优化指南
Digital Observer
298次阅读
2025-04-01 11:08:44
风口浪尖!诚通证券扩容采购Oracle 793万...
Roger的数据库专栏
281次阅读
2025-03-24 09:42:53
切换Oracle归档路径后,不能正常删除原归档路径上的归档文件
dbaking
276次阅读
2025-03-19 14:41:51
Oracle 19c RAC更换IP实战,运维必看!
szrsu
269次阅读
2025-04-08 23:57:08
oracle定时任务常用攻略
virvle
266次阅读
2025-03-25 16:05:19
Oracle NetSuite 客户说|健合(H&H)集团部署 Oracle NetSuite,全面提升全球运营效率
甲骨文中国
254次阅读
2025-03-28 15:00:30