oracle 如何批处理清空多个表,保留表结构。

zzyang 2008-12-24 11:00:46
现在测试库有400多个表需要反复清空,用于测试。我在PL/SQL中只能单条用
truncate table1;
truncate table2;
truncate table3;
truncate table4;
......
一次只能选定一条执行,选定多条执行报错,能否写个存储过程,或者批处理,清空时执行下就可以了。
请高手出手相救啊》。。
...全文
476 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
libolibo888 2008-12-25
  • 打赏
  • 举报
回复
赞成 SQL code的做法。
truc.sql内容
truncate table1;
truncate table2;
truncate table3;
truncate table4;
......

批量执行sql: SQL> @d:\truc.sql
zzyang 2008-12-25
  • 打赏
  • 举报
回复
sleepzzzzz 的方法省事省力省脑筋啊,为什么我没有想到??3Q!好用,搞掂!
zzyang 2008-12-24
  • 打赏
  • 举报
回复
谢谢 ,
但是我要清的不是全部表,这400多张表是整个实例中的一部分,wfqqwer5213 的方法不是把所有的都清掉了?
fuyou001 2008-12-24
  • 打赏
  • 举报
回复
学习了
yf520gn 2008-12-24
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 wfqqwer5213 的回复:]
begin
for c in(select t.constraint_name, t.table_name
from USER_CONSTRAINTS t
where t.constraint_type = 'R') loop
EXECUTE IMMEDIATE 'alter table ' ||c.table_name|| ' DISABLE CONSTRAINT '||c.constraint_name;
end loop;
for c1 in(select table_name from user_tables) loop
EXECUTE IMMEDIATE 'truncate table '||c1.table_name;
end loop;
for c2 in(select t.constraint_name, t.table…
[/Quote]
佩服!
范佩西_11 2008-12-24
  • 打赏
  • 举报
回复
语法:truncate table tablename;
jinjazz 2008-12-24
  • 打赏
  • 举报
回复
那还不如用imp方便
wfqqwer5213 2008-12-24
  • 打赏
  • 举报
回复
begin
for c in(select t.constraint_name, t.table_name
from USER_CONSTRAINTS t
where t.constraint_type = 'R') loop
EXECUTE IMMEDIATE 'alter table ' ||c.table_name|| ' DISABLE CONSTRAINT '||c.constraint_name;
end loop;
for c1 in(select table_name from user_tables) loop
EXECUTE IMMEDIATE 'truncate table '||c1.table_name;
end loop;
for c2 in(select t.constraint_name, t.table_name
from USER_CONSTRAINTS t
where t.constraint_type = 'R') loop
EXECUTE IMMEDIATE 'alter table ' ||c2.table_name|| ' ENABLE CONSTRAINT '||c2.constraint_name;
end loop;

end;

先处理外键再truncate
wfqqwer5213 2008-12-24
  • 打赏
  • 举报
回复

begin
for c in(select table_name from user_tables) loop
EXECUTE IMMEDIATE 'truncate table '||c.table_name;
end loop;
end ;
percy_620515 2008-12-24
  • 打赏
  • 举报
回复
呵呵
rayallen28 2008-12-24
  • 打赏
  • 举报
回复
楼上的最方便
sleepzzzzz 2008-12-24
  • 打赏
  • 举报
回复
-- 批量执行sql:
SQL> @d:\truc.sql
zounf 2008-12-24
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 zzyang 的回复:]
谢谢 ,
但是我要清的不是全部表,这400多张表是整个实例中的一部分,wfqqwer5213 的方法不是把所有的都清掉了?
[/Quote]
建一个临时表temp_tables_tab(table_name varchar2(30)),把这400全表名存在里面.然后再对wfqqwer5213 的语句略改一下:
begin
for c in(select t.constraint_name, t.table_name
from USER_CONSTRAINTS t
where t.constraint_type = 'R') loop
EXECUTE IMMEDIATE 'alter table ' ||c.table_name|| ' DISABLE CONSTRAINT '||c.constraint_name;
end loop;
for c1 in(select table_name from temp_tables_tab) loop
EXECUTE IMMEDIATE 'truncate table '||c1.table_name;
end loop;
for c2 in(select t.constraint_name, t.table_name
from USER_CONSTRAINTS t
where t.constraint_type = 'R') loop
EXECUTE IMMEDIATE 'alter table ' ||c2.table_name|| ' ENABLE CONSTRAINT '||c2.constraint_name;
end loop;

end;

bw555 2008-12-24
  • 打赏
  • 举报
回复
select 'truncate table '||tname ||';' from tab;
执行这个,把执行的得到的结果导出到文件,执行一下,就ok了
xkx2003 2008-12-24
  • 打赏
  • 举报
回复
如果这400个表固定,做成一个程序truncate就好了
如果不固定,还不好办了
cyxin2121921 2008-12-24
  • 打赏
  • 举报
回复
mark
zhangyong369 2008-12-24
  • 打赏
  • 举报
回复
3楼的
如何用imp啊

17,377

社区成员

发帖
与我相关
我的任务
社区描述
Oracle 基础和管理
社区管理员
  • 基础和管理社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧