【问题标题】:How to replicate records using PLSQL in two tables如何在两个表中使用 PL SQL 复制记录
【发布时间】:2017-11-14 11:40:24
【问题描述】:

我有两个现有的表,并且已经添加了许多记录。

formula(formulaId,formulaName,formulaType)
and formula_detail(detailId,formulaId,fieldType,value)

现在公式表有变化,正在添加新列,branchId为

formula(formulaId,formulaName,formulaType,branchId),

and branch table is branch(branchId,branchName)

我想为每个分支复制并粘贴公式表中的每个现有记录。 例如,如果公式表中有 3 个现有记录(ID 为 1、2、3)和 2 个分支。然后复制粘贴操作应该在公式表中产生总共新的 (3*2)=6 条记录,并为每个新创建的公式复制 formula_detail 表中的记录,如下所示

对于 formulaId 1 ,如果formual_detail表中有5条记录,则formual_detail表中的复制粘贴将在formual_detail表中添加(2 * 5)条新记录。

我尝试了一些解决方案,但记录数量巨大,脚本需要时间。请帮忙。如果需要任何测试代码我可以添加。

【问题讨论】:

  • 3*2 = 5? .那是什么时候发生的?
  • 修正为 6 !
  • 添加一些示例数据和预期结果。还发布您尝试过的查询。从您提供的信息中很难理解您究竟需要什么。

标签: sql oracle plsql


【解决方案1】:

首先在明细表中复制同一列是违反数据模型中使用的规范化形式的。

仍然如果你想添加列,

  • 在formula_detail表中使用ALTER语句添加列
  • 尝试使用此Merge 语句 .

    MERGE INTO formula_detail fd USING (SELECT formulaId, branchId from Formula) temp ON (fd.formulaId=temp.formulaId) WHEN MATCHED THEN UPDATE SET fd.branchId=temp.branchId;

【讨论】:

  • formula_detail中没有branchId列
  • 那么复制是什么意思?