【发布时间】:2011-10-15 00:32:34
【问题描述】:
如何在不使用触发器的情况下为 oracle 中的列设置条件 DEFAULT 值? 我想实现以下需求:
- 如果“flag1”=1,则 Newfield 列的默认值必须为“4”。
- 如果“flag1”=2,则 Newfield 列的默认值必须为“5”。
【问题讨论】:
-
使用触发器有什么问题?
标签: oracle database-design constraints default
如何在不使用触发器的情况下为 oracle 中的列设置条件 DEFAULT 值? 我想实现以下需求:
【问题讨论】:
标签: oracle database-design constraints default
这就是触发器的用途。使用它们。
【讨论】:
一列 DEFAULT 不允许引用另一列,因此这是不可能的。
你也许可以让默认值保持为 NULL,然后有一个视图来调整它:
create view mytable_view as
select flag1, nvl(newfield, case flag1 when 1 then 4
when 2 then 5
end) as newfield
from mytable;
【讨论】:
如果列 Newfield 不需要可更新,那么您可以简单地在视图中实现它,如 Tony 所示,或者在 11g 中您可以将其设为虚拟列。
【讨论】:
如果“标志”是会话(或语句)级别的东西,那么SYS_CONTEXT 可能是一种解决方法。如果问题是避免插入的每一行的上下文切换,则可能是 BEFORE STATEMENT 触发器
【讨论】: