plsql - 交互式网格:仅使用不基于表的 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”,依此类推。
还应考虑的其他情况如下:
从上面的 IG,用户再次输入 123456 但这应该计算出 123456 的下一个序列是“-3”
当产品从 IG 中移除时,同样需要考虑,但始终查看该产品的最大序列号。
我正在考虑可能使用 APEX_COLLECTIONS 作为存储当前网格中的内容的一种方式,因为没有对数据库进行任何更改。
解决方案
正如您所提到的,您输入的数据在您插入产品时不会保存到数据库中,因此它实际上并没有存储在任何地方。因此,您无法检查该值是否已存在并输入 -2 或其他值。
要考虑的一些事情可能是将值保存到临时表中,这样您就可以使用一个函数检查其中有多少 product_item(如 123456-%),并将该数字 +1 用作您的新 product_item。
或者你可以走更艰难的路,用javascript来做这一切。为此,您需要以某种方式获取 IG 中的所有记录,查看所有记录并查看 123456 的出现次数,然后插入 123456-(出现次数 + 1)。
推荐阅读
- python - NotFound:404 未找到(错误代码:10011):未知角色
- javascript - 使用 Grunt 任务运行器时未找到任务错误
- javascript - 使用自定义数据和布局属性以编程方式创建图标
- react-native - ReactNative 问题与构造函数说';' 错误
- java - 使用 Rest Assured 和 TestNG 处理异常/失败
- three.js - 相交网格结果与整体网格
- python - 我在最后一行没有输入任何参数,但是我收到了这个错误:“TypeError: draw() 接受 0 个位置参数,但给出了 1 个”
- php - 如何按照订单创建 PHP 页面?
- javascript - 做出反应。在收到服务器的肯定响应之前,如何发送请求?
- r - 返回数据框中包含 R 中“x”元素的行