查询出表名(可以模糊查询)
select * from user_tables where table_name like '%表名%' or table_name like '%表名%';
查询出某个表的对应某个表的外键(可以模糊查询)
select c.table_name,
c.constraint_name as 约束名,
fc.table_name as 与约束关联的表名,
fc.constraint_name as 约束名,
cc.column_name as 与约束关联的列名,
fcc.column_name as 与约束关联的列名
from user_cons_columns fcc,
user_cons_columns cc,
user_constraints c,
user_constraints fc
where fc.constraint_name = c.r_constraint_name
and fc.constraint_name = fcc.constraint_name
and c.constraint_name = cc.constraint_name
and c.constraint_type = 'R'
and fc.table_name in(select * from user_tables where table_name like '%表名%' or table_name like '%表名%');
查询后先删除绑定外键的表再删除全部表数据
CREATE OR REPLACE
PROCEDURE TRUNCATETABLE(namefi in varchar,namefx in varchar) AS
BEGIN
FOR i IN (
select c.table_name,
c.constraint_name as 约束名,
fc.table_name as 与约束关联的表名,
fc.constraint_name as 约束名,
cc.column_name as 与约束关联的列名,
fcc.column_name as 与约束关联的列名
from user_cons_columns fcc,
user_cons_columns cc,
user_constraints c,
user_constraints fc
where fc.constraint_name = c.r_constraint_name
and fc.constraint_name = fcc.constraint_name
and c.constraint_name = cc.constraint_name
and c.constraint_type = 'R'
and fc.table_name like '%表名%' or fc.table_name ='%表名%';
) loop EXECUTE IMMEDIATE 'DELETE FROM ' || i.fc.table_name ;
END loop ;
FOR i IN (
SELECT
table_name
FROM
user_tables fc
WHERE
fc.table_name like namefi or fc.table_name like namefx
) loop EXECUTE IMMEDIATE 'DELETE FROM ' || i.table_name ;
END loop ;
END;
===========注:还有一个问题就是如果使用delete删除太慢,可以使用truncate 进行删除,但是有一点需要注意,就是在truncate删除时,如果数据为空也会出现外键引用错误,可以使用静用外键后进行删除,删除完成后再进行启用外键
禁用外键:
ALTER TABLE 表名 DISABLE CONSTRAINT 外键名;
启用外键:
ALTER TABLE 表名 ENABLE CONSTRAINT 外键名;