Проблема в том, что вы создали внешний ключ без указания имени ограничения.Это плохая практика, потому что это усложняет манипулирование ограничением, поскольку почти весь Oracle DDL требует имя объекта.
Когда мы не указываем явно ограничения, Oracle генерирует стандартное.Все они ужасно похожи, и невозможно сказать, что на самом деле делает ограничение.Например, если у вас есть три ограничения внешнего ключа для SUPPLIER, вам необходимо присоединиться к представлению USER_CONS_COLUMNS, чтобы увидеть, какое ограничение фактически применяет правило для столбца CITY.
Итак, для будущей ссылки,
city varchar2(16) constraint city_fk references city(city_name)
В любом случае, сейчас вам нужно найти имя по умолчанию для ограничения внешнего ключа, чтобы вы могли его удалить.Мы предполагаем, что вы одинаково небрежно относились к таблице CITY, поэтому сначала нам нужно найти ее первичный ключ (вы можете пропустить этот этап, если вы действительно знаете имя).
select constraint_name
from user_constraints
where table_name = 'CITY'
and constraint_type = 'P'
Далее, введите это имяв этот запрос:
select constraint_name
from user_constraints
where table_name = 'SUPPLIER'
and constraint_type = 'R'
and r_constraint_name = '&CITY_PK'
Наконец, удалите ограничение:
alter table supplier drop constraint city_fk