查询出某个表依赖于某个表的外键,进行遍历删除操作

该博客主要涉及Oracle数据库的管理,包括如何通过SQL查询表名和外键信息,以及如何高效删除表数据。提供的存储过程TRUNCATETABLE用于删除指定表及其关联的外键表数据。注意,在执行删除操作前需考虑外键约束,可能需要禁用和启用外键以避免引用错误。
摘要由CSDN通过智能技术生成

查询出表名(可以模糊查询)

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 外键名;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值