Tengo una base de datos que tiene una restricción NOT NULL en un campo y quiero eliminar esta restricción. El factor de complicación es que esta restricción tiene un nombre definido por el sistema y el nombre de esa restricción difiere entre el servidor de producción, el servidor de integración y las diversas bases de datos de desarrolladores. Nuestro proceso actual es verificar los scripts de cambio, y una tarea automatizada ejecuta las consultas apropiadas a través de sqlplus contra la base de datos de destino, por lo que preferiría una solución que pudiera enviarse directamente a sqlplus.
En mi propia base de datos, el SQL para eliminar esto sería:
alter table MYTABLE drop constraint SYS_C0044566
Puedo ver la restricción cuando consulto la all_constraints
vista:
select * from all_constraints where table_name = 'MYTABLE'
pero no estoy seguro de cómo trabajar con el SEARCH_CONDITION
's LONG
tipo de datos o la mejor manera de eliminar la restricción dinámica mirado en marcha incluso después de que sé su nombre.
Entonces, ¿cómo puedo crear un script de cambio que pueda eliminar esta restricción en función de lo que es, en lugar de su nombre?
EDITAR: La respuesta de @ Allan es buena, pero me preocupa (en mi falta de experiencia en Oracle) que puede no ser universalmente cierto que cualquier restricción que pueda tener un nombre generado por el sistema se haya asociado con una forma de eliminar el restricción sin tener que saber su nombre. ¿Es cierto que siempre habrá una manera de evitar tener que saber el nombre de una restricción con nombre del sistema cuando se elimine lógicamente esa restricción?