【问题标题】:oracle forms get data that are both in table and multi row blockoracle 表单获取表和多行块中的数据
【发布时间】:2019-02-07 08:19:34
【问题描述】:

我有一张像这样的表

+-------+
|stud_id|
+-------+
|10     |
|13     |
|12     |
|11     |
|15     |
+-------+

还有这样的多行块

我想要的是,例如,在单击按钮后,我的多行块中有值 13、12、14,会出现一条消息,其中包含我的表和多行块块中的 stud_id,它们是数字只有 13 和 12 而不是 14,因为它不包含在我的表格中。

【问题讨论】:

    标签: oracle plsql oracleforms


    【解决方案1】:

    我想,表格形式(包含多行的表格)是基于某个表格的。我们称之为FORM_TBL。另外,假设包含您发布的数据的表名为STUD_TBL

    一个简单的选项是发布输入到表单中的数据(这意味着它们最终会出现在表格中,但不会被提交,除了你会看到这些行之外没有人会看到)和然后 - 使用 INTERSECT 集合运算符 - 找到共同值。那将是WHEN-BUTTON-PRESSED 触发器:

    declare
      retval varchar2(200);
    begin
      post; 
    
      select listagg(stud_id, ',') within group (order by stud_id) 
      into retval
      from (select stud_id from stud_tbl
            intersect
            select s_id from form_tbl
          );
    
      message('Common values: ' || retval);
    end;
    

    如果您的表单版本不支持LISTAGG,您可以循环执行:

    declare
      retval varchar2(200);
    begin
      post; 
    
      for cur_r in (select stud_id from stud_tbl
                    intersect
                    select s_id from form_tbl
                   )
      loop
        retval := retval ||', '|| cur_r.stud_id;
      end loop;
      message('Common values: ' || retval);
    end;
    

    否则,如果POST 不能满足您的需求,您将不得不遍历表单中的所有行并检查它们是否存在于STUD_TBL 中。

    【讨论】:

    • 先生,我认为 POST 不能满足我的需求,因为我在表的其他一些列中使用了一些自动生成的值。我想我需要在所有行中使用该循环然后进行比较。请帮帮我:(
    • 我建议你不要思考,而是尝试。这是做到这一点的方法。
    猜你喜欢
    • 2022-08-05
    • 1970-01-01
    • 2021-12-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-25
    • 2015-06-21
    相关资源
    最近更新 更多