代码之家  ›  专栏  ›  技术社区  ›  Martien de Jong

在Oracle中,将所有内容从一个模式复制到另一个模式,但只复制前n行

  •  0
  • Martien de Jong  · 技术社区  · 6 年前

    现在我使用下面的语句来复制表,但这只在没有外键约束的情况下有效。

    create table DEV_OWN.mytable as select * from TEST_OWN.mytable where rownum < 10
    

    我想制作一个脚本,循环遍历所有表并复制前n行,如果它依赖于外键,也可能或多或少地复制索引、视图、包、存储过程以及其他所有内容,这样得到的模式就是原始模式的副本,但只有有限的数量或记录。

    因为我必须经常运行这个脚本,所以我希望它尽可能优化。

    2 回复  |  直到 6 年前
        1
  •  1
  •   hotfix Itesh Simlai    6 年前

    正如@Aleksej所建议的,您可以导出架构,然后再次导入它

    您可以访问系统视图,例如 ALL_TABLES , all_indexes all_triggers . 这将允许您构建可以使用 execute immediate

    下面是一个创建和填充表的简单示例

    declare
      v_new_schema varchar2(100) := 'DEV_OWN';
    begin
      for rec in (select * from all_tables)    
      loop
        execute immediate ('create table '||v_new_schema||'.'|| rec.table_name ||' as select * from '||rec.owner||'.'|| rec.table_name ||' where rownum < 10');
      end loop;
    end;
    /
    

    如果您需要全部,那么转储模式实际上更容易。

        2
  •  0
  •   myb    6 年前

    我认为最好的解决方案是用where子句做一个expdp,然后再做一个impdp。