Oracle DB は 11g です。私の質問は、Oracle APPS ERP に関するものです。
販売注文をデキューするために dbms_aq.dequeue を使用しています。問題は、すべての受注明細がデキューされることです。dbms_aq.dequeue が、ORG_ID が 82 である販売注文明細のみをデキューする必要があるという条件を設定します。
これは、Oracle の標準パッケージ ASO_ORDER_FEEDBACK_GET_PVT です。
宣言
l_message SYSTEM.ASO_Order_Feedback_Type;
コード
dbms_aq.dequeue(queue_name => l_queue_name,
dequeue_options => l_dequeue_options,
message_properties => l_message_properties,
payload => l_message,
msgid => l_msg_id);
現在、SYSTEM.ASO_Order_Feedback_Type は、他の多くのタイプ (header_type ASO_Header_Type、line_varray ASO_Line_Var_Type など) で構成されています。
header_type から条件付きで行を取得する条件を設定したい場合、dbms_aq.dequeue を呼び出す前に次の条件を設定できるとします。
l_dequeue_options.deq_condition := 'tab.user_data.header_type.org_id=99';
しかし、line_varray から条件付きで行を取得するための条件の入れ方がわかりません。
- line_varray は ASO_Line_Var_Type のものです
- タイプ ASO_Line_Var_Type は AS VARRAY ( 1000000000 ) OF ASO_Line_Type と定義されています
- ASO_Line_Type は AS OBJECT として定義されます (accounting_rule_id NUMBER 、actual_arrival_date DATE 、....、org_id NUMBER 、...)
このような条件を付けることはできますか
l_dequeue_options.deq_condition := 'tab.user_data.line_varray.org_id=99';