Orace:基于过滤器的默认列值

Dre*_*rew 5 sql oracle oracle10g oracle11g

嗨,开发人员要求在表上添加一个默认值为'N'的列,但是如果该条目的id = 3则该列的默认值应为'Y',无论如何我可以实现在甲骨文?

Lal*_*r B 0

11g方法

Oracle 11g上往下,您可以使用 一步完成此操作VIRTUAL columns

测试用例

SQL> CREATE TABLE tab_default (
  2    ID          NUMBER,
  3    flag varchar2(1) GENERATED ALWAYS AS (decode(id, 3, 'Y', 'N')) VIRTUAL
  4  );

Table created.

SQL>
SQL> INSERT INTO tab_default (ID) VALUES (1);

1 row created.

SQL> INSERT INTO tab_default (ID) VALUES (3);

1 row created.

SQL> INSERT INTO tab_default (ID) VALUES (10);

1 row created.

SQL> SELECT * FROM tab_default;

        ID F
---------- -
         1 N
         3 Y
        10 N

SQL>
Run Code Online (Sandbox Code Playgroud)

因此,列声明DECODE中的函数VIRTUAL可以满足您的要求。

10克方法

您可以使用以下方式满足要求 -

  1. DEFAULT价值
  2. AFTER INSERT TRIGGER每当 id = 3

DEFAULT创建值为“N”的表。仅当插入列 = 3 中的值的新行时才触发触发器id,以便触发器将值更新为“Y”。否则,对于所有其他情况,默认值为“N”。