gpt4 book ai didi

oracle - 插入空值时插入默认值

转载 作者:行者123 更新时间:2023-12-04 01:47:51 26 4
gpt4 key购买 nike

我有一个 Oracle 数据库和一个包含几个非空列的表,所有列都具有默认值。

我想对要插入的任何数据使用一个 insert 语句,并且不必费心检查插入的值是否为空值。

插入空值时,有没有办法回退到默认列值?

我有这个代码:

<?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)
";
}

因此,我必须完全省略该列,否则我将出现错误“尝试将空值插入到非空值列”。
当然我有多个可为空的列,所以代码 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 的最佳答案:我应该停止聪明并坚持通过自动构建的语句忽略空值。

不完全是我想看到的,但没有更好的选择。

最佳答案

对于那些现在阅读它的人:

在 Oracle 12c 中有一个新特性:DEFAULT ON NULL .例如:

CREATE TABLE tab1 (
col1 NUMBER DEFAULT 5,
col2 NUMBER DEFAULT ON NULL 7,
description VARCHAR2(30)
);

因此,当您尝试在 col2 中插入 null 时,这将自动为 7。

关于oracle - 插入空值时插入默认值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5388778/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com