怎么刪除主表的唯一約束?
我刪除oracle主從表中的唯一約束,我先把從表的唯一約束刪除掉:ALTER TABLE 表名DROP CONSTRAINT 約束名;我用同樣的方法,去刪除主表的唯一約束,報錯(
SQL 錯誤: ORA-02273: 此唯一/主鍵已被某些外鍵引用
02273. 00000 - ?"this unique/primary key is referenced by some foreign keys"
)
問一下 ?這種情況怎么弄?
我刪除oracle主從表中的唯一約束,我先把從表的唯一約束刪除掉:ALTER TABLE 表名DROP CONSTRAINT 約束名;我用同樣的方法,去刪除主表的唯一約束,報錯(
SQL 錯誤: ORA-02273: 此唯一/主鍵已被某些外鍵引用
02273. 00000 - ?"this unique/primary key is referenced by some foreign keys"
)
問一下 ?這種情況怎么弄?
舉報
2016-03-21
1.檢查哪些表的外鍵引用了要刪除的表的唯一/主鍵.
????? select A.*
????? ?from user_constraints A, user_constraints B
?????? WHERE b.table_name = 'MYTEST'
????? ? and a.constraint_type = 'R'
????? ? and a.r_constraint_name = b.constraint_name;
2.生成所有引用要刪除表的外鍵的創(chuàng)建語句.
????? select 'select dbms_metadata.get_ddl(''REF_CONSTRAINT'',''' ||
????? ??? A.CONSTRAINT_NAME || ''') FROM DUAL;'
????? ?from user_constraints A, user_constraints B
?????? WHERE b.table_name = 'MYTEST'
????? ? and a.constraint_type = 'R'
????? ? and a.r_constraint_name = b.constraint_name;
??????
3.執(zhí)行步驟2中產(chǎn)生的SQL語句,獲取外鍵定義.
????? set long 3000
????? set linesize 3000
????? set pagesize 300
????? 執(zhí)行步驟2產(chǎn)生的語句.
??????
4.刪除表.
????? drop table mytest cascade constraints;
5.刪除并重建表.
6.建立因創(chuàng)建該表所刪除的外鍵約束.
????? 執(zhí)行步驟3中獲取到的sql語句.
7.檢查各外鍵是否得到恢復(fù),系統(tǒng)是否正常.