关于oracle数据库中的一些小问题
一、错误:ORA-02292
删除表A的记录时,Oracle报错:“ORA-02292:违反完整约束条件(YYY.XXXXX)- 已找到子记录。
(这里本人使用的是Navicat Premium数据库管理工具)
1、找到以”XXXXX“为外键的表A的子表,直接运行
select a.constraint_name, a.table_name, b.constraint_name
from user_constraints a, user_constraints b
where a.constraint_type = 'R'
and b.constraint_type = 'P'
and a.r_constraint_name = b.constraint_name
and a.constraint_name = 'XXXXX';
2、删除相应的子表记录(根据查询出来的语句进行删除)
3、删除主表记录
二、删除表数据(不删除用户)
oracle如何在不删除用户的情况下删除所有表中数据(删除表数据,删除全部表数据)
1、用以下语句拼接禁用所有表的外键约束语句,查询出结果后执行
SELECT 'ALTER TABLE ' || table_name || ' disable CONSTRAINT ' || constraint_name || ';'
FROM user_constraints where CONSTRAINT_TYPE = 'R';
2、再用以下语句拼接删除所有表数据语句,查询出结果后执行,若表中有触发器相关联,
则需要使用truncate进行删除,且truncate不可回滚
SELECT 'DELETE FROM '|| table_name || ';' FROM USER_TABLES
ORDER BY TABLE_NAME;
或
SELECT 'TRUNCATE TABLE '|| table_name || ';' FROM USER_TABLES
ORDER BY TABLE_NAME;
3、最后把外键打开
SELECT 'ALTER TABLE ' || table_name || ' enable CONSTRAINT ' || constraint_name || ';'
FROM user_constraints where CONSTRAINT_TYPE = 'R';
三、删除表(不删除用户)
oracle如何在不删除用户的情况下删除所有表(删除表,删除全部表)
1、用以下语句拼接删除所有表数据语句,查询出结果后执行
select 'drop table '||table_name||';'
from cat
where table_type='TABLE'
2、清空回收站(oracle的数据库回收站有自动回收,所以不必急于删除表之后就清空回收站)
purge recyclebin;