Oracle APEX - 将 Shuttle Item 选择保存到新表

Posted

技术标签:

【中文标题】Oracle APEX - 将 Shuttle Item 选择保存到新表【英文标题】:Oracle APEX - Saving Shuttle Item selections to a new table 【发布时间】:2012-03-14 15:09:31 【问题描述】:

我正在处理一个项目,我正在处理零件和订单。每个订单可能包含许多部分,并且每个部分在其生命周期中可能存在多个订单(尽管一次不超过一个活动订单)。我的表格目前如下:

 PARTS_TABLE
      PART_NUMBER varchar2(20)
      ASSIGNED_ORDER_NUMBER number(5)
      ASSIGNED_ORDER_STATUS varchar2(20)


 ORDER_TABLE
      ORDER_NUMBER number (5)
      ORDER_STATUS varchar2(20)
      ORDER_PARTS_LIST varchar2(4000) //Comma delimited list generated by shuttle item.

当前的设置对我们 atm 有效(借助上一个问题:Previous Question),但它需要在两个表中复制大量数据,并且它实际上不允许 PART 在多个 ORDERS 上它的生命历程。

我想做的是在这两个表之间创建一个交叉引用表:

 ORDER_PARTS_TABLE
      ORDER_NUMBER number(5) (pk1)
      PART_NUMBER varchar2(20) (pk2)
      ORDER_STATUS varchar2(20)

其中 PART_NUMBER 和 ORDER_NUMBER 创建一个联合主键。

我的主要问题是根据穿梭物品的值创建和编辑 ORDER_PARTS_TABLE 中的行。我能够使用我当前的设置有效地编辑/更新,但在我当前的设置中,我并没有尝试创建行,我只是引用 PARTS_TABLE 中的行。当一个人在 APEX 中使用表单上的穿梭项目将 PARTS 添加到 ORDER 中时,应在 ORDER_PARTS_TABLE 中创建新行,即:

 ORDER_TABLE
      ORDER_NUMBER     ORDER_PARTS_LIST     ORDER_STATUS
      12345            675:342:871:902      ACTIVE


 ORDER_PARTS_TABLE
      ORDER_NUMBER     PART_NUMBER     ORDER_STATUS
      12345            675             ACTIVE
      12345            342             ACTIVE
      12345            871             ACTIVE
      12345            902             ACTIVE

如果稍后在删除部分的位置编辑该订单,则应从 ORDER_PARTS_TABLE 中删除与该关系相关的行或将其 ORDER_STATUS 设置为“已删除”

 ORDER_TABLE
      ORDER_NUMBER     ORDER_PARTS_LIST     ORDER_STATUS
      12345            675:871:902          ACTIVE

 either...
 ORDER_PARTS_TABLE
      ORDER_NUMBER     PART_NUMBER     ORDER_STATUS
      12345            675             ACTIVE
      12345            342             REMOVED
      12345            871             ACTIVE
      12345            902             ACTIVE

  or...
  ORDER_PARTS_TABLE
      ORDER_NUMBER     PART_NUMBER     ORDER_STATUS
      12345            675             ACTIVE
      12345            871             ACTIVE
      12345            902             ACTIVE

这些有意义吗?我目前的解决方案只是使用我非常满意的触发器,但让我知道解决这个新问题的最佳方法是什么。谢谢!

编辑:我一直在进行一些持续的挖掘,并发现了一些听起来很有希望的东西,如果它可以适应的话。这里有没有人有经验 REGEXP_SUBSTR? LINKLINK

【问题讨论】:

【参考方案1】:

APEX 提供了一个实用程序,可以将值从穿梭项目中拆分出来,如下所示:

declare
    tab apex_application_global.vc_arr2;
begin
    tab := apex_util.string_to_table (:p1_multiple_item);
    ...
end;

因此,根据您的要求,您可以这样做:

declare
    tab apex_application_global.vc_arr2;
begin
    tab := apex_util.string_to_table (:p1_multiple_item);
    for i in 1..tab.count loop
        insert into order_parts_table (order_number, part_number, order_status)
        values (:p1_order_number, tab(i), 'ACTIVE');
    end loop;
end;

(注意我没有处理该行是否已经存在,但你明白了。)

删除项目的处理将遵循相同的路线,但会稍微复杂一些。

【讨论】:

嘿托尼!感谢您的回复!我只是想澄清一下...您已将其设置为提交时的页面流程正确吗? Tony... 一个问题:我正在尝试在创建订单的同一页面上运行此过程。因此,ORDER_NUMBER 会在提交表单时自动递增和分配。无论如何要获取该值并在此过程中使用它来代替:p1_order_number?那有意义吗?谢谢! 是的,这应该是可能的,但是“自动递增”到底是什么意思? 它使用基本的数据库序列来生成 ORDER_NUMBER,方法是在插入新行时从最后一个值递增。 在这种情况下,您可以使用sequence_name.currval 而不是:p1_order_number 获取值

以上是关于Oracle APEX - 将 Shuttle Item 选择保存到新表的主要内容,如果未能解决你的问题,请参考以下文章

Oracle APEX - 将 Shuttle Item 选择保存到新表

Oracle Apex Shuttle 项目数组在提交时为空

Oracle Apex:在另一个项目更改时刷新项目

sql apex shuttle v2,connoar

APEX Shuttle - 获得更多选定值

Oracle APEX 4.2安装和配置