Oracle データベースと、null 以外の列がいくつかあるテーブルがあり、すべてデフォルト値が設定されています。
挿入するデータに対して 1 つの挿入ステートメントを使用したいと思います。挿入された値が null かどうかを確認する必要はありません。
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 ステートメントは非常に読みにくく、醜く、私はそれが好きではありません。
次のようなステートメントが 1 つあります。
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 の最良の答えを受け入れました。スマートになるのをやめ、自動的に作成されたステートメントを介して null 値を省略することに固執する必要があります。
まさに私が見たいものではありませんが、これ以上の選択肢はありません。