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