Insertar valor predeterminado cuando se inserta nulo
Tengo una base de datos Oracle y una tabla con varias columnas no nulas, todas con valores predeterminados.
Me gustaría usar una declaración de inserción para cualquier dato que quiera insertar, y no me moleste en verificar si los valores insertados son nulos o no.
¿Hay alguna forma de volver al valor de columna predeterminado cuando se inserta nulo?
Tengo este código:
<?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)
";
}
Entonces, tengo que omitir la columna por completo, o tendré el error "tratando de insertar una columna nula a no nula". Por supuesto, tengo varias columnas anulables, por lo que la declaración de inserción de creación de código es muy ilegible, fea y simplemente no me gusta de esa manera.
Me gustaría tener una declaración, algo similar a:
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) );
Eso, por supuesto, es una consulta hipotética. ¿Conoces alguna forma de lograr ese objetivo con Oracle DBMS?
EDITA:
Gracias a todos por sus respuestas o comentarios. Parece que no hay una forma "estándar" de lograr lo que quería, así que acepté la mejor respuesta de la OMI: que debería dejar de ser inteligente y seguir omitiendo los valores nulos a través de declaraciones construidas automáticamente.
No es exactamente lo que me gustaría ver, pero no hay mejor opción.