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

Oracle Advanced Queue: Access a queue from another database and dequeue

为简单起见,我在数据库 A 上有一个队列。我在数据库 B 中有一个程序包和代码。该代码实际上只是一个巨大的出列队列,它使队列中的消息出列并处理数据。我知道如果它是 table 我会做 SELECT .. FROM tablename@databaselink。但我想 运行 出列函数并让它从队列中出列。任何帮助都会很棒。

我可以对消息执行 @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);

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

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

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

如果您不能这样做,以下方法应该可行:

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