Plsql Oracle Apex选择列表LOV条件查询

Plsql Oracle Apex选择列表LOV条件查询,plsql,oracle-apex,oracle-apex-20.1,oracle-apex-20.2,interactive-grid,Plsql,Oracle Apex,Oracle Apex 20.1,Oracle Apex 20.2,Interactive Grid,我在Oracle Apex 20.2应用程序中有一个可编辑交互式网格(用于产品销售表),其中有一个选择列表(用于选择产品) 目前我正在使用下面的查询来填充这个值列表 SELECT productName,productId FROM product WHERE productAvailability = 'Y' 有一些产品需要将产品可用性设置为“N”。当我进行此更改时,product\u sale的Interactive Grid显示的是productId,而不是productName 我需要

我在Oracle Apex 20.2应用程序中有一个
可编辑交互式网格(用于
产品销售
表),其中有一个
选择列表(用于选择
产品

目前我正在使用下面的查询来填充这个值列表

SELECT productName,productId FROM product WHERE productAvailability = 'Y'
有一些产品需要将
产品可用性设置为“N”
。当我进行此更改时,
product\u sale
Interactive Grid
显示的是
productId
,而不是
productName

我需要实现的是,对于新记录(当要通过单击“添加行”按钮将新记录添加到表中时),仅显示具有
productAvailability='Y'
的产品,对于旧记录,无论
productAvailability
如何,都显示所选产品的
productName

表格结构

样本数据

交互式网格视图


如何实现这一点?

您可以使用列设置中的“值的级联列表”选项实现这一点。让我用EMP示例表上的一个示例来说明-您应该能够将其转换为您自己的代码:

情境:布莱克不能被选为任何其他员工的经理,除非他已经是经理

这将是选择:

SELECT ename, empno FROM emp WHERE ename != 'BLAKE'
正如所料,对于BLAKE作为管理器的记录,MGR列将显示id,因为该值不在选择列表查询的结果集中。这就是你看到的行为

该解决方案有两个步骤:

  • 将查询与具有当前行值的查询合并。我已经用CTE重写了查询
  • 确保当前行中的列
    ename
    绑定到
    :ename
    。在“值的级联列表”中,将“父列”和“要提交的项”设置为
    ENAME
    。现在,选择列表将采用
    :ENAME
    的当前行值,并且对于具有“BLAKE”作为管理器的用户,值列表将包括“BLAKE”

  • 谢谢你的回答。现在,
    product\u sale
    Interactive Grid
    问题已经解决,它显示的是
    productId
    ,而不是
    productAvailability=N
    产品的
    productName
    。但当我单击“添加行”并选择一个新产品时,它会一直显示加载循环,而所选产品不会被选中。我认为问题在于
    值的级联列表
    。这有什么办法吗?在我将
    父列
    值设置为
    productSaleId
    要提交的项目
    设置为
    productId
    后,问题得到解决。
    WITH all_mgr(dv, rv) AS
    (SELECT ename, empno FROM emp WHERE ename != 'BLAKE'
      UNION
     SELECT m.ename, m.empno 
       FROM emp e 
            JOIN emp m ON e.mgr = m.empno 
      WHERE e.ename = :ENAME
    )
    SELECT dv, rv FROM all_mgr