Plsql Oracle高级队列:从另一个数据库访问队列并退出队列

Plsql Oracle高级队列:从另一个数据库访问队列并退出队列,plsql,queue,Plsql,Queue,为了简单起见,我在数据库a中有一个队列。在数据库B中有一个包和代码。代码实际上只是一个巨大的出列,它将队列中的消息出列,并处理数据。我知道如果是一张桌子,我只会选择。。从…起tablename@databaselink. 但是我想运行dequeue函数,让它从队列中退出。任何帮助都会很棒 我可以对消息执行@dblink来调用来自另一个DB的消息,将我的消息设置为为为队列创建的消息,但我不确定如何在开始部分调用实际队列并将其出列 DECLARE dequeue_options dbm

为了简单起见,我在数据库a中有一个队列。在数据库B中有一个包和代码。代码实际上只是一个巨大的出列,它将队列中的消息出列,并处理数据。我知道如果是一张桌子,我只会选择。。从…起tablename@databaselink. 但是我想运行dequeue函数,让它从队列中退出。任何帮助都会很棒

我可以对消息执行@dblink来调用来自另一个DB的消息,将我的消息设置为为为队列创建的消息,但我不确定如何在开始部分调用实际队列并将其出列

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',
                           ...);