oracle删除所有表数据

declare
    cursor c1 is select table_name from user_tables;
    stmt varchar2(4000);
begin
  for  cc in c1 loop
        BEGIN
    stmt:='Truncate table'||cc.table_name;
    dbms_output.put_line(stmt);
    execute immediate stmt;
    EXCEPTION
     WHEN OTHERS THEN
           dbms_output.put_line('error'||stmt);
           end;
  end loop;
end;
/
由于有外键关联关系的表不能直接Truncate
暂时先将外键关系改成cascade
然后将Truncate table 改为 delete


ORA-02266: 表中的唯一/主键被启用的外键引用


       在删除有父子表关系的表的数据时,我们都知道要先删除子表再删除父表数据。或者先取消外键在删除。昨天采用先删字表在删父表,删除时使用truncate,结果在删除父表的时候,给出了这个提示:“表中的唯一/主键被启用的外键引用”。而改成delete则删除成功。网上给出的解释是ddl与dml 的区别。这也是truncate与delete的又一个不同之处

你可能感兴趣的:(oracle)