Oracle Advanced Queue:从另一个数据库访问队列并出列

时间:2016-01-26 16:38:22

标签: plsql queue

为了简单起见,我在数据库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);

1 个答案:

答案 0 :(得分:0)

如果我是你,我会在远程数据库上创建一个包来处理dequeue,enqueue等操作,并将该包的执行权授予本地数据库连接的模式。

然后在本地数据库上你可以这样做:

package_name.dequeue_proc@remote_db (queue_name => 'QUEUE_NAME',
                                     ...);

如果你不能这样做,以下情况应该有效:

DBMS_AQ.DEQUEUE@remote_db (queue_name => 'QUEUE_NAME',
                           ...);