例が明確になると思います。 FK制約に応じて、
SQL> create table master(col1 number, part number)
2 partition by list(part) (
3 partition p0 values (0),
4 partition p1 values (1),
5 partition p2 values (2)
6 );
Table created.
SQL> alter table master add constraint master_pk primary key (col1, part);
Table altered.
SQL> create table detail(col1 number, part number, col2 varchar2(100));
Table created.
SQL> alter table detail add constraint master_detail_fk foreign key (col1, part) references master (col1, part);
Table altered.
が、私は両方のテーブルのいくつかの行を挿入します:私はmaster
テーブル、パーティション、およびFKでmaster
を参照するdetail
テーブルを持っていると言う
SQL> insert into master (col1, part) select level, mod(level, 3) from dual connect by level < 10;
9 rows created.
SQL> insert into detail (col1, part, col2) select level, mod(level, 3), 'something' from dual connect by level < 10;
9 rows created.
今、私はマスターでパーティションを削除しよう:
SQL> alter table master drop partition p1;
alter table master drop partition p1
*
ERROR at line 1:
ORA-02266: unique/primary keys in table referenced by enabled foreign keys
は私がドロップする前にFKを処理する必要があります。
もちろん
SQL> alter table detail disable constraint master_detail_fk ;
Table altered.
SQL> alter table master drop partition p1;
Table altered.
は、私が参照行を落とした場合、制約が検証されることはありません:Oracleははっきり言うよう
SQL> alter table detail enable validate constraint master_detail_fk ;
alter table detail enable validate constraint master_detail_fk
*
ERROR at line 1:
ORA-02298: cannot validate (SIUCREDITO.MASTER_DETAIL_FK) - parent keys not
found
SQL> alter table detail enable novalidate constraint master_detail_fk ;
Table altered.
SQL>
問題は、_uniqueまたは別のtable_で使用可能な外部キーが参照する主キーであります'NOT NULL'制約ではありません。また、[スクリーンショットではない](http://meta.stackoverflow.com/questions/285551/why-may-i-not-upload-images-of-code-on-so-when-asking-a-question/ 285557#285557) – Aleksej
プライマリキーの制約を無効にする必要があります。また、このテーブルを参照する別のテーブルに外部キー制約がある場合は、これを無効にする必要があります。 –