首页 > 解决方案 > 创建条件列

问题描述

我需要创建一个仅在另一列的值为“Y”时才是强制性的列(如果它是“N”,则不是强制性的)。另一列的类型是长度为 1 的 CHAR。如何使用触发器来执行此操作?我相信触发器比检查更合适,但请让我知道你的想法。

谢谢!

标签: sqloracle

解决方案


您可以CHECK向表中添加约束。例如:

create table t (
  active char(1),
  amount number(6),
  constraint c1 check (active <> 'Y' or amount is not null)
);

然后你可以尝试插入:

insert into t (active, amount) values ('N', null); -- OK

insert into t (active, amount) values ('N', 123); -- OK

insert into t (active, amount) values ('Y', 123); -- OK

insert into t (active, amount) values ('Y', null); -- fails!

请参阅db<>fiddle的运行示例。


推荐阅读