Estoy tratando de reemplazar a un colega en hacer un trabajo de Oracle, y se encontró con un inconveniente. En el intento de escribir una secuencia de comandos para modificar una columna para anulable, me encontré con la hermosa error ORA-01451:MODIFICAR COLUMNA en oráculo - ¿Cómo comprobar si una columna es anulable antes de establecerse como anulable?
ORA-01451: column to be modified to NULL cannot be modified to NULL
Esto está ocurriendo porque la columna ya es NULL. Tenemos varias bases de datos que necesitan ser revisadas, por lo que en mi asunción errónea, pensé que establecerla en NULL debería funcionar de forma general para asegurar que todo el mundo estuviera actualizado, independientemente de si habían configurado manualmente esta columna como nulable o no. Sin embargo, esto aparentemente causa un error para algunas personas que ya tienen la columna como nulable.
¿Cómo se puede verificar si una columna ya puede contener nulos para evitar el error? Algo que lograría esta idea:
IF(MyTable.MyColumn IS NOT NULLABLE)
ALTER TABLE MyTable MODIFY(MyColumn NULL);
Gracias Tony! Lo hice funcionar (con una solución menor para cerrar la cita en la ejecución inmediata) ¡y ahora estamos en el negocio! –
Sugiero que consultar el diccionario de datos cada vez que ejecute esta ALTER TABLE sería bastante ineficiente, en comparación con solo manejar la excepción si se produce. –
Jeffrey, probablemente tenga razón, pero esto fue para una secuencia de comandos de cambio de esquema, por lo que es una situación de ejecución única por base de datos. Una vez que se ha realizado el cambio, no se ejecutará nuevamente. –