【发布时间】:2018-11-16 09:13:16
【问题描述】:
我对编码真的很陌生(几天)。我想请你帮忙解决我的问题/想法。
我有 .SQL 脚本用于重新排队过期消息。
DECLARE
v_en_options DBMS_AQ.ENQUEUE_OPTIONS_T;
v_en_message_properties DBMS_AQ.MESSAGE_PROPERTIES_T;
v_en_message_handle RAW (16);
v_dq_options DBMS_AQ.DEQUEUE_OPTIONS_T;
v_dq_message_properties DBMS_AQ.MESSAGE_PROPERTIES_T;
v_dq_message_handle RAW (16);
v_neeeding MESSAGE;
CURSOR x
IS
SELECT MSG_ID, corr_id
FROM test.AQ$TEST_T
WHERE msg_state = 'EXPIRED';
BEGIN
FOR MESSAGE IN x
LOOP
v_dq_options.msgid := MESSAGE.msg_id;
DBMS_AQ.dequeue (queue_name => 'test.AQ$_test_T_E',
dequeue_options => v_dq_options,
message_properties => v_dq_message_properties,
payload => v_needing,
msgid => v_dq_message_handle);
v_en_message_properties.correlation := MESSAGE.corr_id;
DBMS_AQ.enqueue (queue_name => 'test.test_Q',
enqueue_options => v_en_options,
message_properties => v_en_message_properties,
payload => v_needing,
msgid => v_en_message_handle);
END LOOP;
COMMIT;
EXCEPTION
WHEN OTHERS
THEN
ROLLBACK;
RAISE;
END;
它可以按我的意愿工作(希望如此 :))但我的想法是放置另一个可以为所有 QUEUES 执行此操作的代码块 - 它会从每天几次的工作开始。 它需要帮助如何将变量插入queue_name和select(表名)。例如另一个queue_name是test1,test2,test3和对应的表。
我不想做几个单独运行的脚本,我更喜欢通过一些选择/配置样式来声明队列。它会在我的项目中增长得非常快。 我真的在寻找你的答案,并希望能更多地了解编码。
祝你有美好的一天!!!
【问题讨论】: