首页 > 解决方案 > 交互式网格:仅使用不基于表的 PL/SQL 处理

问题描述

环境:Oracle APEX v5.1 和 Oracle 12c 第 2 版

首先,我创建了一个不基于基础表的交互式网格,因为我将使用 PL/SQL 手动处理它。

我一直在使用以下内容作为指南:

https://apex.oracle.com/pls/apex/germancommunities/apexcommunity/tipp/6361/index-en.html

我基本上有以下查询:

select  
  level as id,  
  level as grid_row,  
  null as product,  
  null as product_item  
from dual connect by level <= 1  

专注于 product_item 列将是只读列并且只能输入产品编号的 product_item 列,我想实现以下目标:

Product    Product Item
---------- -------------
123456     123456-1
123456     123456-2
556677     556677-1
654321     654321-1
654321     654321-2
654321     654321-3
123456     123456-3

从上面看,当用户输入产品然后从字段中跳出标签时,我希望触发一个 DA,它将“-1”序列添加到该产品编号的末尾。然后是用户然后在 IG 中添加另一行并输入相同的产品编号,然后我希望它在其末尾附加“-2”。

仅当产品更改编号时,我需要按照 556677 等将新产品的序列重置为“-1”,依此类推。

还应考虑的其他情况如下:

  1. 从上面的 IG,用户再次输入 123456 但这应该计算出 123456 的下一个序列是“-3”

  2. 当产品从 IG 中移除时,同样需要考虑,但始终查看该产品的最大序列号。

我正在考虑可能使用 APEX_COLLECTIONS 作为存储当前网格中的内容的一种方式,因为没有对数据库进行任何更改。

标签: plsqloracle-apexoracle12coracle-apex-5.1

解决方案


正如您所提到的,您输入的数据在您插入产品时不会保存到数据库中,因此它实际上并没有存储在任何地方。因此,您无法检查该值是否已存在并输入 -2 或其他值。

要考虑的一些事情可能是将值保存到临时表中,这样您就可以使用一个函数检查其中有多少 product_item(如 123456-%),并将该数字 +1 用作您的新 product_item。

或者你可以走更艰难的路,用javascript来做这一切。为此,您需要以某种方式获取 IG 中的所有记录,查看所有记录并查看 123456 的出现次数,然后插入 123456-(出现次数 + 1)。


推荐阅读