Oracle 数据库是 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 定义为 VARRAY (1000000000) OF ASO_Line_Type
- 并且 ASO_Line_Type 被定义为 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';