【问题标题】:How to set a conditional DEFAULT value to a column in oracle without using triggers?如何在不使用触发器的情况下为 oracle 中的列设置条件 DEFAULT 值?
【发布时间】:2011-10-15 00:32:34
【问题描述】:

如何在不使用触发器的情况下为 oracle 中的列设置条件 DEFAULT 值? 我想实现以下需求:

  1. 如果“flag1”=1,则 Newfield 列的默认值必须为“4”。
  2. 如果“flag1”=2,则 Newfield 列的默认值必须为“5”。

【问题讨论】:

  • 使用触发器有什么问题?

标签: oracle database-design constraints default


【解决方案1】:

这就是触发器的用途。使用它们。

【讨论】:

    【解决方案2】:

    一列 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;
    

    【讨论】:

      【解决方案3】:

      如果列 Newfield 不需要可更新,那么您可以简单地在视图中实现它,如 Tony 所示,或者在 11g 中您可以将其设为虚拟列。

      【讨论】:

        【解决方案4】:

        如果“标志”是会话(或语句)级别的东西,那么SYS_CONTEXT 可能是一种解决方法。如果问题是避免插入的每一行的上下文切换,则可能是 BEFORE STATEMENT 触发器

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2016-05-01
          • 2021-07-03
          • 2013-10-19
          • 2019-01-15
          • 1970-01-01
          • 1970-01-01
          • 2021-05-11
          相关资源
          最近更新 更多