生成PL/SQL脚本以从许多相关表创建记录副本

生成PL/SQL脚本以从许多相关表创建记录副本,sql,database,oracle,plsql,Sql,Database,Oracle,Plsql,对于给定的表和该表中一条记录的唯一ID,生成PL/SQL(或SQL)脚本以创建该记录的副本,然后从与该记录具有外键关系的表中创建所有记录的副本,然后从与这些第二层记录具有外键关系的表中创建所有记录的副本,最简单/最快的方法是什么,依此类推,直到复制模式中所有直接或间接相关表中的所有相关记录为止 这样的脚本在捕获和复制记录和所有后代记录的状态以供测试时非常有用 考虑事项: 模式有500多个表,因此手动编写此脚本会很慢 通过确保新记录具有自己生成/更改的主键值,避免违反唯一约束。使用max(id_

对于给定的表和该表中一条记录的唯一ID,生成PL/SQL(或SQL)脚本以创建该记录的副本,然后从与该记录具有外键关系的表中创建所有记录的副本,然后从与这些第二层记录具有外键关系的表中创建所有记录的副本,最简单/最快的方法是什么,依此类推,直到复制模式中所有直接或间接相关表中的所有相关记录为止

这样的脚本在捕获和复制记录和所有后代记录的状态以供测试时非常有用

考虑事项:

  • 模式有500多个表,因此手动编写此脚本会很慢
  • 通过确保新记录具有自己生成/更改的主键值,避免违反唯一约束。使用max(id_column)+1而不是sequence生成新id,以简化问题
  • 使用Oracle元数据表收集表列表,可能还包括主键列和外键列(?)

谢谢。

假设FK存在且有效,您可以从dba_约束驱动它,从r_约束_name=起始表的PK约束开始。对于找到的每个表,您将查询dba_tab_列,并从这里构建查询和生成插入。您可以递归地执行此操作以捕获树中的所有表。为了更简单,我将生成一个存储过程表\u ins包装器,以便在生成插入时调用存储过程,以避免为每一行生成插入(col1,…)。

有一个工具声称能够做到这一点: