为了简单起见,我在数据库A上有一个队列。我在数据库B中有一个包和代码。代码实际上只是一个巨大的队列,它使队列中的消息出列并对数据进行处理。我知道如果它是一个表我会做SELECT .. FROM tablename @ databaselink。但我想运行dequeue函数并让它从队列中出列。任何帮助都会很棒。
我可以用@dblink和消息来调用来自其他数据库的消息,将我的消息设置为为队列创建的消息,但我不确定如何在开始部分调用实际队列并将其出列
DECLARE
dequeue_options dbms_aq.dequeue_options_t;
message_properties dbms_aq.message_properties_t;
message_handle RAW(16);
message user.message;
BEGIN
DBMS_AQ.DEQUEUE(queue_name => 'queue_name',
dequeue_options => dequeue_options,
message_properties => message_properties,
payload => message,
msgid => message_handle);
答案 0 :(得分:0)
如果我是你,我会在远程数据库上创建一个包来处理dequeue,enqueue等操作,并将该包的执行权授予本地数据库连接的模式。
然后在本地数据库上你可以这样做:
package_name.dequeue_proc@remote_db (queue_name => 'QUEUE_NAME',
...);
如果你不能这样做,以下情况应该有效:
DBMS_AQ.DEQUEUE@remote_db (queue_name => 'QUEUE_NAME',
...);