我在尝试使用PLSQL将消息排入Single_Consumer QUEUE时遇到问题,我无法在oracle网站上找到任何帮助,也无法在stackoverflow上找到任何帮助。
我已经能够将没有用户定义属性的消息排入队列,但我似乎无法使用用户定义的属性将相同的消息排入队列,这样我就可以使用2个不同的侦听器消息选择器。
我遇到的问题是用户定义的属性应该放在dbms_aq.message_properties_t类型中包含的user_property字段中。
user_property字段是SYS.ANYDATA类型的对象,我需要放一对(键,值)。
我试过这个:
l_obj t_my_type := t_my_type('tol', 'B');
l_anydata SYS.ANYDATA;
其中t_my_type定义如下:
CREATE OR REPLACE TYPE t_my_type AS OBJECT (
g_val1 VARCHAR2(20),
g_val2 VARCHAR2(20)
);
然后我这样做:
l_anydata := SYS.ANYDATA.convertObject(l_obj);
v_message_properties.user_property := l_anydata;
我将此信息排入队列:
dbms_aq.enqueue(queue_name => 'queueName',enqueue_options => enqueue_options,message_properties => v_message_properties,payload => v_mv_payload,msgid => v_msg_id);
问题是:message_properties的字段填充了" void" SYS.ANYDATA因此使侦听器分裂。
有没有人帮我解决这个问题?
我在想的是我在从复杂对象到任何数据的转换对象上做错了...
提前致谢
答案 0 :(得分:0)
在联系Oracle的支持后,我被告知AQJMS不支持这种实现。 我的需求在接收方使用了主题解决了。
答案 1 :(得分:0)
尝试在dbms_aq.enqueue命令之前添加它:
v_mv_payload.set_string_property('tol','B');