Plsql 从oracle pl sql中的架构中删除所有记录

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

我正在使用oracle 10g。 我想从存在子记录的模式(用户)的每个表中删除所有记录。 我尝试禁用每个表中存在的所有约束,然后尝试删除记录。 但是花了整整一天的时间。 我们有更好的方法吗

我试过这个

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个模式中执行循环,禁用约束也会花费太多时间?