我正在处理一个项目,我在处理PARTS和ORDERS。每个ORDER可能包含许多PARTS,每个PART在其生命周期内都有可能存在多个ORDER(尽管每次不超过一个ACTIVE命令)。我的表目前如下:
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.
这个当前的设置对我们来说是有用的(在前一个问题的帮助下: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设置为“REMOVED”
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? LINK LINK
答案 0 :(得分:3)
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;
(注意我还没有处理过该行是否已经存在,但你明白了。)
删除项目的处理将沿着相同的路线进行,但有点复杂。