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
相关产品推荐
相关产品推荐

