У меня есть база данных, которая имеет ограничение NOT NULL для поля, и я хочу удалить это ограничение. Усложняющим фактором является то, что это ограничение имеет системное имя, и это имя ограничения отличается между производственным сервером, сервером интеграции и различными базами данных разработчиков. Наш текущий процесс - проверить скрипты изменений, а автоматическая задача выполняет соответствующие запросы через sqlplus против целевой базы данных, поэтому я предпочел бы решение, которое можно было бы просто отправить в sqlplus.
В моей собственной базе данных SQL, чтобы отбросить это, будет:
alter table MYTABLE drop constraint SYS_C0044566
Я вижу ограничение при запросе представления all_constraints
:
select * from all_constraints where table_name = 'MYTABLE'
но я не уверен, как работать с типом данных SEARCH_CONDITION
LONG
или как лучше всего динамически удалять искомое ограничение даже после того, как я знаю его имя.
Итак, как я могу создать изменение script, которое может отбросить это ограничение на основе того, что это такое, а не его имя?
EDIT: Ответ @Allan является хорошим, но я обеспокоен (в моем отсутствии опыта Oracle), что не может быть универсально верно, что любое ограничение, которое может иметь сгенерированное системой имя, будет связано с ним способом удаления ограничения без узнав его имя. Верно ли, что всегда будет существовать способ избежать необходимости знать имя с именем системного имени при логическом снижении этого ограничения?