2012-03-14 10 views
0

私は、PARTSとORDERSを扱っているところで作業しているプロジェクトがあります。各注文には多くの部品が含まれていてもよく、各部品はその寿命の間に複数の注文に存在する可能性があります(一度に複数のACTIVE ORDERはありません)。次のように私のテーブルは、現在、以下のとおりです。Oracle APEX - 新しいテーブルに項目を選択する

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がその人生の間に複数の注文書に載っているためです。

は、私は何をしたいのは、これら2つのテーブル間の相互参照表を作成することです:PART_NUMBERとORDER_NUMBERが共同主キーを作成

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

私の主な問題は、シャトル項目の値に基づいてORDER_PARTS_TABLEの行を作成および編集することです。私は現在の設定で効果的に編集/更新できますが、現在の設定では行を作成しようとしていないため、PARTS_TABLEの行を参照しています。 APEXのフォーム上のシャトルアイテムを使用する人は、新しい行がORDER_PARTS_TABLEで作成する必要があるORDERにパーツを追加した場合、すなわち:

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 
の関係と、そのメイクセンスのいずれかをしていますか?私の現在の解決策は、私が喜んで喜んでいるトリガーを使用していますが、この新しい問題にアプローチする最良の方法は何かを教えてください。ありがとう!

EDIT:私はいくつかの継続的な掘り下げを行っており、それが適応できるのであれば合理的に有望なものを見つけました。ここに誰でも REGEXP_SUBSTRの経験がありますか? LINKLINK

答えて

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; 

(NB私が扱っていません行がすでに存在しているかどうかを確認してください)

アイテムを削除する処理は同じ行になりますが、複雑です。

+0

ちょっとトニー!レスポンスありがとう!私はちょうど明確にしたい...正しいことを提出するページプロセスとしてこれを設定しましたか? – Spags

+0

そうです、はい –

+0

トニー...質問:私は注文を作成しているのと同じページでこのプロセスを実行しようとしています。したがって、ORDER_NUMBERは自動的にインクリメントされ、フォームの提出時に割り当てられます。とにかくその価値をつかんで、このプロセスの代わりにそれを使うのですか?p1_order_number?それは理にかなっていますか?ありがとう! – Spags

関連する問題