在 Oracle 中,我们如何在 dbms_aq.dequeue 中有条件地出列数据
in Oracle, how can we dequeue data conditionally in dbms_aq.dequeue
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
- type ASO_Line_Var_Type 被定义为 VARRAY ( 1000000000 ) OF ASO_Line_Type
- 和 ASO_Line_Type 被定义为对象(accounting_rule_id NUMBER,actual_arrival_date DATE,....,org_id NUMBER,....)
条件可以这样写吗
l_dequeue_options.deq_condition := 'tab.user_data.line_varray.org_id=99';
使用 TABLE
和 EXISTS
运算符。
l_dequeue_options.deq_condition := 'EXISTS(
SELECT 1 FROM
TABLE(CAST(tab.user_data.line_varray AS SYSTEM.ASO_Line_Var_Type)) e
WHERE e.org_id = 99)';
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
- type ASO_Line_Var_Type 被定义为 VARRAY ( 1000000000 ) OF ASO_Line_Type
- 和 ASO_Line_Type 被定义为对象(accounting_rule_id NUMBER,actual_arrival_date DATE,....,org_id NUMBER,....)
条件可以这样写吗
l_dequeue_options.deq_condition := 'tab.user_data.line_varray.org_id=99';
使用 TABLE
和 EXISTS
运算符。
l_dequeue_options.deq_condition := 'EXISTS(
SELECT 1 FROM
TABLE(CAST(tab.user_data.line_varray AS SYSTEM.ASO_Line_Var_Type)) e
WHERE e.org_id = 99)';