как удалить родительскую таблицу, которая также является дочерней по отношению к своему дочернему элементу?

#oracle #sqlplus

#Oracle #sqlplus

Вопрос:

У меня есть две таблицы, обе из которых ссылаются друг на друга первичными ключами как на внешние ключи, я хочу удалить обе, но не могу.

Я попробовал это :

 alter table my_table drop constraint cons_name;
  

Это дало мне :

ORA-02443: Невозможно удалить ограничение — несуществующее ограничение

Комментарии:

1. Добро пожаловать в Stack Overflow. Пожалуйста, отредактируйте свой вопрос, используя edit кнопку чуть ниже тегов вопросов, и включите DDL для ваших таблиц, включая все ограничения. Не видя, что на самом деле мало кто может вам помочь. Спасибо.

2. Спасибо! извините за опоздание, так как было время экзамена, и когда я опубликовал этот пост, я был очень близок к крайнему сроку и не мог ясно мыслить …. очень приятное сообщество, и я надеюсь, что смогу помочь позже!!!

Ответ №1:

Предположим, у вас есть следующие таблицы (Oracle 12c)…

 create table table1 ( column1 primary key )
as
select level
from dual
connect by level <= 10 ;

create table table2 ( column1 primary key )
as
select level
from dual
connect by level <= 10 ;

alter table table1
add constraint fk1 
    foreign key ( column1 ) references table2( column1 ) ;

alter table table2
add constraint fk2 
    foreign key ( column1 ) references table1( column1 ) ;
  

Если вы хотите удалить ограничения, убедитесь, что вы используете правильный
имена ограничений.

 -- find the correct constraint names
select table_name, constraint_name, constraint_type
from user_constraints
where table_name in( 'TABLE1', 'TABLE2' ) ;

TABLE_NAME  CONSTRAINT_NAME  CONSTRAINT_TYPE  
TABLE2      SYS_C0021482     P                
TABLE1      SYS_C0021483     P                
TABLE1      FK1              R                
TABLE2      FK2              R  

-- fails: constraint name correct, table name wrong
SQL> alter table table1 drop constraint SYS_C0021482;
ORA-02443: Cannot drop constraint  - nonexistent constraint

-- fails: need to disable/remove the FK constraint first
SQL> alter table table1 drop constraint SYS_C0021483;
ORA-02273: this unique/primary key is referenced by some foreign keys

-- okay
SQL> alter table table1 drop constraint FK1 ;
Table TABLE1 altered.
  

Если вы просто хотите удалить обе таблицы, включая все ограничения, используйте …

 SQL> drop table table1 cascade constraints purge ;

Table TABLE1 dropped.

SQL> drop table table2 cascade constraints purge ;

Table TABLE2 dropped.
  

Проверьте:

 -- any constraints left? no.
SQL> select table_name, constraint_name, constraint_type
  2  from user_constraints
  3  where table_name in( 'TABLE1', 'TABLE2' ) ;

no rows selected
  

Комментарии:

1. спасибо за ответ, и это сработало для меня …. я попытался добавить одно ограничение и вставить значения, а затем добавить другое, но это было …. плохо! последний запрос пригодится позже!! так что спасибо и за это !!:D