【发布时间】:2016-12-25 21:23:57
【问题描述】:
我正在运行 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,它将被存储。在那种情况下,我希望改为放置默认值。
【问题讨论】:
-
Null 是一个完全有效的值。默认是未提供值时。你可以写一个“插入前”触发器吗?
-
在 11g 中,恐怕没有原生的方法来完成它。如果您不想使用触发器,则可以创建一个视图。无论哪种方式,您都必须为每一列编写一些逻辑,就像为每一列编写
default on null一样,只是它会更长一点。 -
我绝对可以做到。实际上我已经这样做了,我正在做 COALESCE(:new.FLAG, 0) 并且这似乎有效,但我想知道 11g 中是否有更优雅的解决方案。如此简单的事情竟然变得如此复杂,这似乎很奇怪。
-
“如此简单的事情竟然变得如此复杂,这似乎很奇怪。”欢迎来到甲骨文
标签: oracle oracle11g null default default-value