我有一个 Oracle 数据库和一个包含多个非空列的表,所有列都具有默认值。
我想对我想要插入的任何数据使用一个插入语句,并且不要费心检查插入的值是否为空值。
插入空值时,有什么方法可以退回到默认列值?
我有这个代码:
<?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 列”。当然我有多个可以为空的列,所以代码创建插入语句非常不可读,丑陋,我只是不喜欢那样。
我想要一个声明,类似于:
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 的最佳答案:我应该停止聪明,坚持通过自动构建的语句省略空值。
不完全是我想看到的,但没有更好的选择。