sql - 创建条件列
问题描述
我需要创建一个仅在另一列的值为“Y”时才是强制性的列(如果它是“N”,则不是强制性的)。另一列的类型是长度为 1 的 CHAR。如何使用触发器来执行此操作?我相信触发器比检查更合适,但请让我知道你的想法。
谢谢!
解决方案
您可以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的运行示例。
推荐阅读
- mysql - 如何在不重复计算的情况下执行 SQL
- c - MSBuild 无法从 CLI 构建。无效的静态调用语法
- wpf - keyDown 事件在按下并释放第二个键后停止触发
- python - 转换数据帧的 2 列,在对应的 uint16_t 的列中存储两个 uint8_t
- c++ - 如何定义构造函数c ++
- java - 使用 GLES30 进行 VAO 渲染:偏移量/长度错误!!!!!!错误
- c# - 使用 Span 存储单词集合的有效方法是什么
? - python - AttributeError:“str”对象没有属性“add_picture”
- amazon-web-services - AWS Cognito 客户端 SDK v3 在运行管理员禁用用户命令时返回未定义的“byteLength”
- c++ - 在方法调用参数中创建对象返回空对象?