【问题标题】:can i change all column values according to master table in oracel forms我可以根据 oracle 表单中的主表更改所有列值吗
【发布时间】:2020-05-11 22:32:19
【问题描述】:

我正在 oracle 11g 中创建 POS。在销售表格中,我有两个主表和子表,一列是那些表中存在的“类型”,子表处于表模式有 10 行。 现在我要知道的是,当我在主表中更改“类型”时在子表中插入 10 行后,是否有可能根据主表更改子表中的所有值。 我正在尝试主表中的列表项,但它只是更改子表的当前值。如何更改子表中的所有值。

【问题讨论】:

    标签: oracle oracle11g oracleforms


    【解决方案1】:

    按照你的说法,有两种选择。

    如果提交了更改(即主行和明细行都存储到数据库中),您可以将明细行更新为

    update detail_table d set
      d.type = :master_block.type
      where d.foreign_key_column = :master_block.primary_key_item;
    

    然后重新查询详细块为

    go_block('detail_block');
    execute_query;
    

    另一种是遍历detail块,逐行修改item:

    go_block('detail_block');
    first_record;
    loop
      :detail_block.type := :master_block.type;
      exit when :system.last_record = 'true';
      next_record;
    end loop;
    

    【讨论】:

    • 感谢您的回复。我已将脚本放在 detail_block.type 上的“when-list-change”触发器中。但是当我更改列表块时会挂起。 go_block('detail_block');第一记录;循环 :detail_block.type := :master_block.type;退出时:system.last_record = 'true';下一个记录;结束循环;
    • 不客气。我犯了一个错误; TRUE 应该用单引号括起来(现在已修复),但我认为您已经修复了它,否则表单将无法编译。我发布的代码应该在 MASTER 块中的某个地方,而不是细节。如果要在 DETAIL 块中使用主块的 TYPE 值(用于新添加的行),则将详细块 TYPE 列的 DEFAULT 值修改为:MASTER_BLOCK.TYPE。
    • 触发器没有问题。触发触发器后表单冻结。我认为问题出在“退出时:system.last_record = 'true' 循环没有用这个命令停止
    • 调试它,然后看看发生了什么。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-21
    • 2015-07-22
    • 2014-05-03
    • 2017-10-06
    • 1970-01-01
    • 2016-12-30
    相关资源
    最近更新 更多