我有一个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)
";
}
所以,我完全忽略该列,或将我的错误“试图插入空不空列”。 当然,我有多个可为空的列,所以创建插入语句的代码非常难读,难看,我只是不喜欢这种方式。
我想有一个说法,类似于:
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”,而不是“默认”一词在“假设查询”里面? – palindrom 2011-03-22 09:06:34
原因我不知道插入时默认值是多少。但是@Vincent Malgrat建议我可以获取这种形式ALL_TAB_COLUMNS – SWilk 2011-03-22 09:54:34