You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Oracle Forms中如何将填充的主从块数据另存为带新主键的新记录

主从块修改后保存为新记录的处理方法

别直接改查出来的旧记录,按下面的步骤来就能生成带新主键的新记录:

  • 先复制主记录为新行
    切换到主块,调用Forms内置的DUPLICATE_RECORD方法,这会生成一条和当前主记录一模一样的新行,但主键还是原来的。接下来要么手动给主键赋新值,要么调用数据库序列生成唯一主键:

    GO_BLOCK('MASTER_BLOCK');
    DUPLICATE_RECORD;
    :MASTER_BLOCK.PK_ID := YOUR_SEQUENCE.NEXTVAL; -- 用序列生成新主键
    
  • 复制子记录并关联新主键
    主记录复制好后,得把对应的子记录也复制过来,并且把外键改成新主记录的主键。循环遍历子块的所有记录,逐个复制更新:

    GO_BLOCK('DETAIL_BLOCK');
    FIRST_RECORD;
    LOOP
      DUPLICATE_RECORD;
      :DETAIL_BLOCK.MASTER_FK := :MASTER_BLOCK.PK_ID; -- 绑定新主记录的主键
      EXIT WHEN :SYSTEM.LAST_RECORD = 'TRUE';
      NEXT_RECORD;
    END LOOP;
    
  • 修改需要调整的字段
    主从新记录都生成后,再修改你要改的字段值,这时候操作的全是新记录,Commit的时候就会往数据库插新行,而不是更新旧记录了。

  • 几个要注意的点

    • 如果主键是数据库自增列,别手动赋值,让数据库自动生成就行;要是Forms层面控制的,得保证新主键唯一,别冲突。
    • 复制前确认好当前主记录是你要复制的那条,别复制错了。
    • 可以把这些逻辑写到一个按钮的WHEN-BUTTON-PRESSED触发器里,点一下就完成复制,比手动操作方便。

内容的提问来源于stack exchange,提问作者Jain

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.08 21:45:31