Plsql 从oracle pl sql中的架构中删除所有记录
我正在使用oracle 10g。 我想从存在子记录的模式(用户)的每个表中删除所有记录。 我尝试禁用每个表中存在的所有约束,然后尝试删除记录。 但是花了整整一天的时间。 我们有更好的方法吗 我试过这个Plsql 从oracle pl sql中的架构中删除所有记录,plsql,oracle10g,Plsql,Oracle10g,我正在使用oracle 10g。 我想从存在子记录的模式(用户)的每个表中删除所有记录。 我尝试禁用每个表中存在的所有约束,然后尝试删除记录。 但是花了整整一天的时间。 我们有更好的方法吗 我试过这个 BEGIN FOR i IN (SELECT table_name FROM user_tables) LOOP EXECUTE IMMEDIATE 'delete from' || '"'||i.table_name||'"'; END LOOP; COMMI
BEGIN
FOR i IN (SELECT table_name FROM user_tables)
LOOP
EXECUTE IMMEDIATE 'delete from' || '"'||i.table_name||'"';
END LOOP;
COMMIT;
END;
但有子记录时会出现例外情况。
我想要这样的东西
BEGIN
FOR i IN (SELECT table_name FROM user_cons_columns)
LOOP
for j in (select column_name from i.table_name)
loop
EXECUTE IMMEDIATE 'alter table "'||i.table_name||'"'||' disable constraint "'||j.column_name||'"';
end loop;
END LOOP;
COMMIT;
END;
请帮我一点忙。您可以使用数据泵,导出您的模式:
expdp system/s
directory=backup_dir
CONTENT=METADATA_ONLY
dumpfile=YOUR_SCHEMA_HEREmetaddl.dmp
schemas=YOUR_SCHEMA_HERE
logfile=YOUR_SCHEMA_HERE.$Date.log
drop user YOUR_SCHEMA_HERE cascade;
然后删除您的模式:
expdp system/s
directory=backup_dir
CONTENT=METADATA_ONLY
dumpfile=YOUR_SCHEMA_HEREmetaddl.dmp
schemas=YOUR_SCHEMA_HERE
logfile=YOUR_SCHEMA_HERE.$Date.log
drop user YOUR_SCHEMA_HERE cascade;
然后导入它:
impdp system/s
directory=backup_dir
dumpfile=YOUR_SCHEMA_HEREmetaddl.dmp
logfile=imp_log_of_meta.log
尝试执行以下操作,然后删除所有具有子记录的表。 您可以更改查询以在删除所有记录时启用约束
BEGIN
FOR c IN ( SELECT c.owner, c.table_name, c.constraint_name
FROM user_constraints c, user_tables t
WHERE c.table_name = t.table_name
AND c.status = 'ENABLED'
AND constraint_type = 'R'
ORDER BY c.constraint_type DESC)
LOOP
DBMS_UTILITY.exec_ddl_statement (
'alter table "'
|| c.owner
|| '"."'
|| c.table_name
|| '" disable constraint '
|| c.constraint_name);
END LOOP;
END;
/
禁用外键需要一整天吗?是的,因为我有大约200个表和4个不同的模式。是否可以删除模式并在将来重新创建它?是的。我将在中重新创建它future@KhurramZulfiqarAli即使在4个模式中执行循环,禁用约束也会花费太多时间?