如何在Oracle表单中的数据块中插入记录

时间:2019-01-29 11:33:11

标签: oracle oracleforms

我有一个oracle表单,其中包含引用数据库表 master_item 的数据块 B_ITEM 。用户正在数据块中手动在一张 bill 中输入两个项目,根据某些条件,我需要在同一块 B_ITEM 中自动添加货运项目。您能指导一下如何在数据块中插入数据吗? (注意:我不想直接插入它所引用的表中)

步骤1在B_ITEM的日期块上创建了一个画布,用户可以在其中提供输入。块
 包含master_item表中的字段项。

第2步,我们说,用户在画布上输入了两个项目,该项目引用了B_ITEM,然后单击“确定”按钮。

步骤3因此,连同两个项目一起,应该在块B_ITEM中插入一个项目,并且该项目应该显示在画布上的第三行上。

enter image description here
在上图中,我显示了单个项目的示例,因此一旦用户单击“确定”按钮,第二个项目应根据设置表添加。

MASTER_FREIGHT_LINK
ITEM FREIGHT_ITEM
101396306 101396307

因此,用户输入ITEM-101396306单击OK按钮后,应立即在第二行中添加In canvas货运项目。

2 个答案:

答案 0 :(得分:2)

我不太了解您的财产,所以-让我大声思考。

  • 数据库中有一个表名为MASTER_ITEM
  • 您创建了一个表格,其块B_ITEM基于MASTER_ITEM表
  • 数据块包含一些我认为是数据库项目(属于MASTER_ITEM表)的项目
  • 您在这些项目中输入了一些数据
  • 根据它们的值(即某种条件),您需要填充驻留在同一块中但不是数据库项的FREIGHT_ITEM。正确吗?

如果是这样,

  • 创建FREIGHT_ITEM(有几种方法;一种简单的方法是使用垂直工具栏的+按钮;或者复制/粘贴现有​​项之一并修改其属性)
  • 在应确定应将哪个值放入FREIGHT_ITEM中的项目上创建WHEN-VALIDATE-ITEM触发器。将您提到的条件放入触发代码中,并填充FREIGHT_ITEM的值,例如

    if :b_item.item1 > 100 and 
       :b_item.item2 = 'A' 
    then
       :b_item.freight_item := 42;
    end if;
    

现在,正如您所说的那样,您不想将该值直接存储到数据库中(这意味着它不是数据库项),您将必须手动执行此操作,从而创建其他ON-INSERT和/或PRE-INSERT和/或PRE-UPDATE触发器,其操作方式为

update master_item i set
  i.freight_item = :b_item.freight_item
  where i.some_id = :b_item.some_id;    

答案 1 :(得分:0)

ON-INSERT触发器可用于覆盖oracle表单插入机制。在插入时触发器中写入必要的插入语句,该语句可以在任何表上插入数据。