1

我在Oracle Apex 20.2应用程序中有一个Editable Interactive Grid(用于product_sale表)和一个Select List(选择一个product) 。

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

SELECT productName,productId FROM product WHERE productAvailability = 'Y'

有一些产品我需要设置productAvailability as 'N'. 当我进行此更改时,Interactive Grid显示product_saleproductId不是productName.

我需要实现的是,仅显示带有productAvailability = 'Y'新记录的产品(当通过单击添加行按钮将新记录添加到表中时),而旧记录则显示productName所选产品的productAvailability.

表结构

表数据

样本数据

样本数据

交互式网格视图

示例用户界面

我怎么能做到这一点?

4

1 回答 1

1

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

情况: BLAKE 不能被选为任何其他员工的经理,而不是他已经担任经理的员工。

这将是选择:

SELECT ename, empno FROM emp WHERE ename != 'BLAKE'

正如预期的那样,对于以 BLAKE 作为管理器的记录,MGR 列将显示 id,因为该值不在选择列表查询的结果集中。这是您所看到的行为。

解决方案有 2 个步骤:

  1. 将查询与具有当前行值的查询联合。我已经使用 CTE 重写了查询。
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
  1. 确保ename当前行中的列绑定到 :ENAME. 在“值的级联列表”中,将“父列”和“要提交的项目”都设置为ENAME. 现在,选择列表将采用当前行的值,:ENAME并且值列表将包括具有“BLAKE”作为经理的用户的“BLAKE”。
于 2020-12-09T07:41:53.443 回答