У меня есть база данных с ограничением 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
или как лучше всего динамически удалить искомое ограничение, даже после того, как я знаю его имя.
Итак, как мне создать скрипт изменения, который может отбросить это ограничение, основываясь на том, что это такое, а не на том, как оно называется?
EDIT:
@ Ответ Аллана хороший, но меня беспокоит (из-за отсутствия у меня опыта Oracle), что не всегда может быть правдой, что любое ограничение, которое может иметь сгенерированное системой имя, будет связано с ним, как способ удалить ограничение без необходимость знать его имя. Правда ли, что всегда найдется способ избежать необходимости знать имя системного имени при логическом отбрасывании этого ограничения?