【问题标题】:For loop in Oracle FormsOracle Forms 中的 For 循环
【发布时间】:2020-06-26 06:38:27
【问题描述】:

我有一个 Oracle Forms 项目。 项目是这样进行的。

我有一个数据库,其中有一个名为students_payment 的表。 表单只有两个块。

名为 date_1 的第一个块包含 from_date 和 to_date
当您将日期 14-3-2019 设置为 14-3-2020
然后按回车
第二个块称为details_1。它是表格的,将有三个显示项:

  1. 学生国籍
  2. 付费
  3. 非付费

它会像这样填充表格

Nationality       USA  

paid        65  

Non_paid    36  

这意味着支付了大学学费的美国学生是 65 岁,没有支付的是 36 岁,

我做了所有这一切,但问题是我把我的代码放在没有 WHERE 条件的国籍条件下,所以它会带来所有国籍。但它带来的只是美国的第一条记录。

如何在 FOR LOOP 中添加一个 select 语句以将第一个国家/地区放在第一条记录中,将第二个国家/地区放在第二条记录中,以此类推所有国籍?

【问题讨论】:

    标签: oracle oracle12c oracleforms


    【解决方案1】:

    你在说一件事,展示另一件事,这两者不匹配。

    如果第二个块是表格,那么它的布局应该是这样的

    Nationality    Paid    Non-paid
    -----------    ----    --------
    USA              65          35
    France           70          30
    

    即不是你拥有它的方式;你的布局是form,而不是tabular。我建议您删除该块并从头开始创建它,但这次要注意向导的要求。

    它还可以解决您目前遇到的问题; form 布局一次显示一条记录。 表格 布局显示多条记录。

    据我了解,这两个块之间没有关系。第一个中使用的值用于限制在第二个块中返回的行。因此,第二个块必须是数据库块,基于一个表(如果你现在有的话,不要让它成为控制块)。这样做,即使第一个块中没有任何内容,当您位于第二个块中并执行查询时,您将获得存储在该表中的所有行。表单会自动执行此操作,您无需编写任何代码。

    FOR 你提到的循环?在我看来,你应该避免它。在数据库块中选择几乎总是错误,但可以在控制块中使用。但是,何必呢?让表单来完成这项肮脏的工作。

    现在,回到结果限制:您可以在第二个块上使用 PRE-BLOCK 触发器并使用 SET_BLOCK_PROPERTY 内置及其 ONETIME_WHERE 属性,使用第一个块中的日期项,例如

    set_block_property('second_block', 
                        onetime_where, 
                       'date_column between :first_block.date_from and :second_block.date_to');
    

    或者,使用第二个块的属性面板并将WHERE 子句设置为

    where date_column between :first_block.date_from and :second_block.date_to
    

    【讨论】:

    • 我知道你的意思是,当我输入代码时,它只显示第一条记录美国学生然后第二列没有什么是我需要 for 循环的原因吗?
    • 否;很可能错误。如果是数据库块,那么 Forms 将返回所有满足条件的行。您唯一的条件与日期有关。这意味着只有 USA 满足条件并且只返回该行。在 SQL*Plus(或 SQL Developer 或 TOAD 或您使用的任何工具)中对其进行测试。
    猜你喜欢
    • 2021-03-02
    • 1970-01-01
    • 2018-03-21
    • 2013-08-18
    • 1970-01-01
    • 2023-04-10
    • 2016-08-03
    • 1970-01-01
    • 2016-05-03
    相关资源
    最近更新 更多