Oracle 11g - “DEFAULT ON NULL”?

时间:2016-08-18 20:17:27

标签: oracle oracle11g null default default-value

我正在运行Oracle数据库11g企业版11.2.0.4.0版 - 64位生产,我试图找到一个相当于12c的“DEFAULT ON NULL”表。基本上我必须创建一个表,其中要求是有人故意或无意中传递NULL值,它被替换为DEFAULT值(在这种情况下NUMBER类型等于1)。在11g中有没有简单的方法呢?我知道我可以在桌子上做一个触发器,但我必须为每一列提供逻辑,这看起来很荒谬。

我的表定义目前如下:

CREATE TABLE MYTABLE
(
    FLAG   NUMBER(1)   DEFAULT 0
)

如果我显式传入null,它将被存储。在那种情况下,我希望改为放置默认值。

1 个答案:

答案 0 :(得分:0)

您可以对列使用简单的'DEFAULT'行为,并且在插入时不提供任何内容。

CREATE TABLE table1 (
id NUMBER(8.0) NOT NULL,
col1 NUMBER(8.0) NOT NULL DEFAULT 10,
col2 NUMBER(8.0) NOT NULL DEFAULT 20,
PRIMARY KEY (id);
);

INSERT INTO table1 (id) values (123); //will result in creating a row with default values.

此外,如果您使用某种ORM,则可以使用动态插入和动态更新选项。这样,如果您没有在插入时提供值,它们将被设置为默认值; 并且更新后,未更改的值将不包含在查询中。

这是在查询中绕过显式null值的方法,并且将应用默认值。