Oracle 甲骨文11g-“;默认为空";?

Oracle 甲骨文11g-“;默认为空";?,oracle,oracle11g,null,default,default-value,Oracle,Oracle11g,Null,Default,Default Value,我正在运行Oracle Database 11g Enterprise Edition 11.2.0.4.0-64位生产版,我正在尝试为一个表找到与12c的“默认值为空”等效的值。基本上,我必须创建一个表,当有人有意或无意地传递空值时,它会被替换为默认值(在这种情况下,数字类型等于1)。在11g中有什么简单的方法可以做到这一点吗?我知道我可以在表上做一个触发器,但我必须为每一列输入逻辑,这看起来很可笑 我的表定义当前如下所示: CREATE TABLE MYTABLE ( FLAG

我正在运行Oracle Database 11g Enterprise Edition 11.2.0.4.0-64位生产版,我正在尝试为一个表找到与12c的“默认值为空”等效的值。基本上,我必须创建一个表,当有人有意或无意地传递空值时,它会被替换为默认值(在这种情况下,数字类型等于1)。在11g中有什么简单的方法可以做到这一点吗?我知道我可以在表上做一个触发器,但我必须为每一列输入逻辑,这看起来很可笑

我的表定义当前如下所示:

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

如果我显式地传入null,它将被存储。在这种情况下,我希望将默认值替换为默认值。

您可以对列使用简单的“默认”行为,并且在插入时不提供任何内容

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是一个完全有效的值。默认值为未提供值时。也许你可以写一个“插入前”触发器?在11g中,恐怕没有原生的方法来完成它。如果不想使用触发器,可以创建一个视图。无论哪种方式,您都必须为每一列编写一些逻辑,就像您为每一列编写
默认值为null
一样,只是会稍微长一点。我完全可以这样做。事实上我已经做了,我正在做COALESCE(:new.FLAG,0),这似乎很有效,但我想知道11g中是否有更优雅的解决方案。如此简单的事情变得如此复杂,这似乎很奇怪。“如此简单的事情变得如此复杂,这似乎很奇怪。”欢迎来到甲骨文