Oracle 高级队列:从另一个数据库访问队列并取消排队



为了简单起见,我在数据库 A 上有一个队列。我在数据库 B 中有一个包和代码。代码实际上只是一个巨大的取消队列,它将队列中的消息取消排队并对数据执行操作。我知道如果它是一个表格,我会做选择..从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',
                           ...);

最新更新