Oracle窗体中的For循环

Oracle窗体中的For循环,oracle,oracle12c,oracleforms,Oracle,Oracle12c,Oracleforms,我有一个Oracle表单项目。 这个项目是这样进行的 我有一个数据库,它有一个名为students\u payment的表。 表单只有两个块 第一个名为date\u 1的块包含from\u date和to\u date 当你把2019年3月14日定为2020年3月14日时 然后按enter键 第二个块名为details\u 1。它是表格,将有三个显示项目: 学生国籍 支付 非付费 它将像这样填充表格 Nationality USA paid 65 Non_p

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

我有一个数据库,它有一个名为
students\u payment
的表。 表单只有两个块

第一个名为
date\u 1
的块包含from\u date和to\u date
当你把2019年3月14日定为2020年3月14日时
然后按enter键
第二个块名为
details\u 1
。它是表格,将有三个显示项目:

  • 学生国籍
  • 支付
  • 非付费
  • 它将像这样填充表格

    Nationality       USA  
    
    paid        65  
    
    Non_paid    36  
    
    这意味着缴纳大学学费的美国学生是65岁,不缴纳的是36岁

    我做了所有这些,但问题是,我把我的代码没有国籍条件,所以它会带来所有国籍。但它只带来了美国的第一张唱片


    如何将select语句放入FOR循环中,将第一个国家/地区放入第一条记录,将第二个国家/地区放入第二条记录,依此类推,适用于所有国家/地区

    你说的是一件事,展示的是另一件事,而这两件事并不匹配

    如果第二个块是表格,那么它的布局应该如下所示

    Nationality    Paid    Non-paid
    -----------    ----    --------
    USA              65          35
    France           70          30
    
    i、 不是你拥有它的方式;您的布局是表单,而不是表格。我建议您删除该块并从头开始创建,但这次请注意向导的要求

    它还将解决您当前遇到的问题;表单布局一次显示一条记录。表格布局显示多条记录

    据我所知,这两个街区之间没有关系。第一个块中使用的值用于限制第二个块中返回的行。因此,第二个块必须是基于表的数据库块(如果您现在有控制块,请不要将其设为控制块)。这样做,即使第一个块中没有任何内容,当您定位到第二个块并执行查询时,您也会得到该表中存储的所有行。表单自动完成这项工作,您不必编写一行代码

    用于您提到的
    循环?在我看来,你应该避免。它在数据库块中几乎总是错误的选择,但可以在控制块中使用。但是,为什么要麻烦呢?让表格来做肮脏的工作

    现在,回到结果限制:您可以在第二个块上使用
    PRE-BLOCK
    触发器,并使用
    SET\u BLOCK\u属性
    内置&its
    ONETIME\u 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循环对吗?不;很可能是错的。如果它是一个数据库块,那么表单将返回满足条件的所有行。你唯一的条件是约会。这意味着只有USA满足条件,并且只返回该行。在SQL*Plus(或SQL Developer或TOAD或您使用的任何工具)中测试它。