17,086
社区成员
发帖
与我相关
我的任务
分享
create procedure del_all_subtabs(tablename varchar2) IS
CURSOR c_tab(tab_name varchar2) is
--该游标用于查找该主表下的所有子表
select a.table_name
from (select a.constraint_name,
b.table_name,
b.column_name,
a.r_constraint_name
from user_constraints a, user_cons_columns b
WHERE a.constraint_type = 'R'
and a.constraint_name = b.constraint_name) a,
(select distinct a.r_constraint_name,
b.table_name,
b.column_name
from user_constraints a, user_cons_columns b
WHERE a.constraint_type = 'R'
and a.r_constraint_name = b.constraint_name) b
where a.r_constraint_name = b.r_constraint_name
and b.table_name = tab_name
and a.table_name != tab_name
order by b.table_name;
v_tab_name varchar2(50);
v_sql varchar2(100);
begin
open c_tab(tablename);
loop
fetch c_tab
into v_tab_name;
exit when c_tab%notfound;
del_all_subtabs(v_tab_name);--递归循环,将下一级的子表清除
v_sql := 'delete from ' || v_tab_name;
execute immediate v_sql;--清除记录
commit;
end loop;
close c_tab;
end del_all_subtabs;