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

时间:2014-10-06 20:52:56

标签: sql database oracle plsql

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

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

考虑:

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

感谢。

1 个答案:

答案 0 :(得分:1)

假设FK存在且有效,您将从dba_constraints开始,从r_constraint_name =起始表的PK约束开始。对于找到的每个表,您将查询dba_tab_columns并从此处构建查询和生成的插入。您将以递归方式执行此操作以捕获树中的所有表。为了方便起见,我将生成一个存储过程table_ins包装器,这样当你生成INSERT时,你可以调用store_proc来避免为每一行生成INSERT(col1,....)。