【发布时间】:2011-07-20 07:32:56
【问题描述】:
我有一个 Oracle 数据库和一个包含多个非空列的表,所有列都具有默认值。
我想对我想要插入的任何数据使用一个插入语句,并且不费心检查插入的值是否为空值。
有没有办法在插入 null 时回退到默认列值?
我有这个代码:
<?php
if (!empty($values['not_null_column_with_default_value'])) {
$insert = "
INSERT INTO schema.my_table
( pk_column, other_column, not_null_column_with_default_value)
VALUES
(:pk_column,:other_column,:not_null_column_with_default_value)
";
} else {
$insert = "
INSERT INTO schema.my_table
( pk_column, other_column)
VALUES
(:pk_column,:other_column)
";
}
所以,我必须完全省略该列,否则会出现错误“尝试将 null 插入非 null 列”。 当然我有多个可以为空的列,所以代码 create insert 语句非常不可读,丑陋,我就是不喜欢那样。
我想要一个声明,类似于:
INSERT INTO schema.my_table
( pk_column, other_column, not_null_column_with_default_value)
VALUES
(:pk_column,:other_column, NVL(:not_null_column_with_default_value, DEFAULT) );
这当然是一个假设的查询。您知道我可以通过什么方式使用 Oracle DBMS 实现该目标吗?
编辑:
谢谢大家的回答。似乎没有“标准”方式来实现我想要的,所以我接受了 IMO 的最佳答案:我应该停止聪明,坚持通过自动构建的语句省略空值。
不完全是我想看到的,但没有更好的选择。
【问题讨论】:
-
为什么不在“假设查询”中输入“not_null_column_with_default_value”列的默认值而不是“DEFAULT”一词?
-
因为我不知道插入时的默认值是什么。但正如@Vincent Malgrat 建议的那样,我可以获取该表格 ALL_TAB_COLUMNS