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