当两个块都基于过程时,是否可以在 Oracle Forms 中创建主从关系?

Is it possible to create master-detail relationship in Oracle Forms when both of the blocks are based on procedure?

我有两个基于过程的块,我想在它们之间创建主从关系。

我使用数据块向导执行此操作。它创建触发器 ON-CHECK-DELETE-MASTER,此触发器假定我的详细信息块基于 table (FRL_XXX.TRIGGERS_QUERY, but it is a procedure) 并生成游标:

CURSOR TRIGGERS_cur IS      
SELECT 1 FROM FRL_XXX.TRIGGERS_QUERY F     
WHERE F.PTG_PST_CODE = :S_TYPES.PST_CODE;

是否有解决此问题的方法?

当我尝试删除此触发器或删除光标时出现错误:

FRM-30409: Delete Record Behavior for the relation is invalid.

我从来没有这样做过,但是 - 让我大声想想。

如果数据块是基于一个程序,则意味着该程序returns(作为其IN OUT参数)是一个数组。我会说你必须

  • 创建您自己的触发器(即替换向导创建的触发器
    • 请注意,这些触发器通常有注释 "don't modify it!"。如果您再次 运行 向导,它可能会覆盖您的代码,因此 更安全的 方法是创建一个过程来完成这项工作,并从触发器中调用该过程
  • 声明一个局部变量(数组)并向其中获取数据;将所有参数传递给过程,就像调用它时所做的那样,以填充数据块
  • 查看数组的内容并检查是否有任何行满足条件 PTG_PST_CODE = :S_TYPES.PST_CODE
  • 如果是这样,请按照向导的触发器在这种情况下执行的操作

基本上,我认为您必须编写自己的流程来替换默认的表单行为。

在基于过程的块中,如果您将关系类型选择为 Isolated ,Oracle 表单将允许两个块之间存在 Master Detail 关系,因为在这种情况下 ON-CHECK-DELETE-MASTER 触发器将不存在。

您将能够从详细信息块中检索记录,因为 ON-POPULATE-DETAILS 触发器将照常工作。

在我的例子中,只有细节块是基于过程的,它工作正常。

注意:Isolated 类型的关系将删除主记录,即使存在子记录也是如此。这种情况你需要单独处理。

如果您按照 littlefoot

进行操作,请逐步分享您的方法