我正在运行 Oracle Database 11g 企业版版本 11.2.0.4.0 - 64 位生产版,我试图为表找到与 12c 的“DEFAULT ON NULL”等效的表。基本上我必须创建一个表,其中的要求是每当有人有意或无意地传递 NULL 值时,它就会被替换为 DEFAULT 值(在本例中为 NUMBER 类型等于 1)。在11g中有什么简单的方法可以做到这一点吗?我知道我可以在 table 上做一个触发器,但我必须为每一列添加逻辑,这看起来很荒谬。
我的表定义目前如下所示:
CREATE TABLE MYTABLE
(
FLAG NUMBER(1) DEFAULT 0
)
如果我明确传入 null 它将被存储。在这种情况下,我希望改为放置默认值。
最佳答案
您可以对列使用简单的“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,则可以使用动态插入和动态更新选项。这样,如果您在插入时不提供值,它们将被设置为默认值; 并且在更新时,未更改的值将不会包含在查询中。
通过这种方式,您可以绕过查询中的显式空值,并应用默认值。
关于甲骨文 11g - "DEFAULT ON NULL"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39026790/