Plsql 交互式网格:仅使用PL/SQL进行处理,不基于表

Plsql 交互式网格:仅使用PL/SQL进行处理,不基于表,plsql,oracle-apex,oracle12c,oracle-apex-5.1,Plsql,Oracle Apex,Oracle12c,Oracle Apex 5.1,Env:Oracle APEX v5.1和Oracle 12c版本2 首先,我创建了一个交互式网格,它不是基于底层表的,因为我将使用PL/SQL手动处理它 我一直在使用以下内容作为指导: 我基本上有以下疑问: select level as id, level as grid_row, null as product, null as product_item from dual connect by level <= 1 综上所述,当用户在产品中

Env:Oracle APEX v5.1和Oracle 12c版本2

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

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

我基本上有以下疑问:

select  
  level as id,  
  level as grid_row,  
  null as product,  
  null as product_item  
from dual connect by level <= 1  
综上所述,当用户在产品中键入,然后从字段中签出时,我希望启动DA,将-1序列添加到该产品编号的末尾。然后用户在IG中添加另一行并输入相同的产品编号,然后我希望它在末尾附加-2

仅当产品更改编号时,我需要根据556677等将新产品的序列重置为-1

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

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

当产品从IG中移除时,也需要满足同样的要求,但要始终查看该产品的最大序列号


我在考虑可能使用APEX_集合作为存储网格中当前内容的一种方法,因为尚未向数据库提交任何更改。

在这种情况下,假设您有一个产品值集合,我使用的是内置的SYS.ODCINUMBERLIST,它是一种VARRAY数据类型,那么您输出的SQL将是:

选择id, id为grid_行, 产品 产品| |'-'| |行|编号按id按产品顺序划分 作为产品(单位)项目 从…起 选择ROWNUM作为id, 列值作为乘积 从桌子上 SYS.ODCINUMBERLIST 123456, 123456, 556677, 654321, 654321, 654321, 123456 按id订购 输出:


dbfiddle

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

一些要考虑的事情可能是将这些值保存到一个临时表中,这样你就可以有一个函数去检查有多少个产品项目,比如123456个百分点,用这个数字+ 1作为你的新产品项目。


或者你可以更努力地使用javascript来完成这一切。为此,您需要以某种方式获取IG中的所有记录,仔细查看所有记录,查看您有多少次发生123456次,然后插入123456次不发生+1。

尽管有很多关于您的意图和想法的陈述,但似乎没有问题。如果您能准确地说明您要的是什么,或者您有什么代码以及错误是什么,这会有所帮助。@MT0-我请求您帮助我如何根据输入的产品值在产品_项中生成和维护序列,以及如何处理上述两种情况。希望这更清楚一些。从您的解决方案中我可以看到,您提供了一个查询。我实际上需要根据product列中输入的值动态计算product_项目序列。由于数据库中实际上没有存储任何内容,因此需要维护此序列。最后,用户将最终按下应用按钮,然后将信息存储在后端。
Product    Product Item
---------- -------------
123456     123456-1
123456     123456-2
556677     556677-1
654321     654321-1
654321     654321-2
654321     654321-3
123456     123456-3
ID | GRID_ROW | PRODUCT | PRODUCT_ITEM -: | -------: | ------: | :----------- 1 | 1 | 123456 | 123456-1 2 | 2 | 123456 | 123456-2 3 | 3 | 556677 | 556677-1 4 | 4 | 654321 | 654321-1 5 | 5 | 654321 | 654321-2 6 | 6 | 654321 | 654321-3 7 | 7 | 123456 | 123456-3