Tengo una base de datos Oracle y una tabla con varias columnas que no son nulas, todas con valores predeterminados.Insertar valor predeterminado cuando se inserta nulo
Me gustaría utilizar una declaración de inserción para cualquier dato que quiera insertar, y no me molesto en verificar si los valores insertados son nulos o no.
¿Hay alguna forma de volver al valor predeterminado de la columna 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)
";
}
Por lo tanto, tengo que omitir la columna en su totalidad, o que tendrá el error "tratando de inserción nula de no columna nula". Por supuesto que tengo varias columnas con nulos, por lo que el código create insert statement es muy ilegible, feo, y simplemente no me gusta de esa manera.
Me gustaría tener un estado de cuenta, 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?
EDITAR:
Gracias a todos por sus respuestas. 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 limitarme a omitir 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.
¿Por qué no entran valor predeterminado de la columna "not_null_column_with_default_value" en lugar de la palabra "DEFAULT" dentro de la "consulta hipotética"? – palindrom
Causa No sé cuál es el valor predeterminado en el momento de insertar. Pero como @Vincent Malgrat sugirió que puedo buscar ese formulario ALL_TAB_COLUMNS – SWilk