/*

基本组成

发送方(DB1):

Queue type :决定发送消息的类型

Queue table :消息发送的载体

Queue :队列

Subscriber :订购者,同一个队列可以有n个订购者

Propagation :传播进程

*/

--发送方(DB1 )代码:

--用账户 SYS 登录

--1.创建 AQ_SENDER 用户并赋权

create user AQ_SENDER identified by "oppo";

grant connect,resource,aq_administrator_role,unlimited tablespace to phs;

grant create database link to phs;

grant execute on dbms_aq to phs;

grant execute on dbms_aqadm to phs;

begin

dbms_aqadm.grant_system_privilege('ENQUEUE_ANY', 'phs', FALSE);

dbms_aqadm.grant_system_privilege('DEQUEUE_ANY', 'phs', FALSE);

end;

--用账户 AQ_SENDER 登录

--2.创建 db link

create database link MES_LINK

connect to WMS_APP identified by "oppo"

using '(DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = 10.0.0.115)(PORT = 1521))(CONNECT_DATA = (SID = testassy)))';

--3.创建一个队列载体对象,一个没有 body 的 type 在 AQ_SENDER 下

create or replace type TS_BILL_TRANSFER as object

(

"BILL_NO" VARCHAR2(30),

"LINE_NUMBER" NUMBER,

"STOCK_NO" VARCHAR2(10),

"TO_STOCK_NO" VARCHAR2(10),

"LOCATION" VARCHAR2(60),

"PART_NO" VARCHAR2(60),

"PART_DESC" VARCHAR2(240),

"PART_QTY" NUMBER,

"OPERATOR" VARCHAR2(30),

"DATETIME_CREATED" DATE

);

--4.创建队列表

begin

-- Call the procedure

sys.dbms_aqadm.create_queue_table(queue_table => 'QT_BILL_TRANSFER',

queue_payload_type => 'TS_BILL_TRANSFER',--这就是我们定义的 type

sort_list => 'priority,enq_time',--按优先级和入列时间排序

multiple_consumers => TRUE, --多消费者

comment => 'QUEUE FOR SEND BILL-TRANSFER DATA TO ERP',

auto_commit => FALSE --手动控制事务--create queue

);

end;

--5.创建队列

begin

sys.dbms_aqadm.create_queue(

queue_name => 'Q_BILL_TRANSFER',

queue_table => 'QT_BILL_TRANSFER',--刚刚建立的queue表

queue_type => sys.dbms_aqadm.normal_queue,

max_retries => 3,--dequeue失败后重试次数

retry_delay => 1,--重试前等待

retention_time => 0 --dequeue后保持时间,不保持

);

end;

--6.启动队列

begin

dbms_aqadm.start_queue('Q_BILL_TRANSFER',true,true);

end;

--7.创建消息订阅者

DECLARE

subscriber sys.aq$_agent;

BEGIN

subscriber := sys.aq$_agent('PHS', 'PHS.Q_BILL_TRANSFER', NULL);

DBMS_AQADM.ADD_SUBSCRIBER(queue_name => 'Q_BILL_TRANSFER', subscriber => subscriber);

--DBMS_AQADM.remove_subscriber(queue_name => 'Q_BILL_TRANSFER', subscriber => subscriber);

END;

--8.创建 propagation

BEGIN

DBMS_AQADM.SCHEDULE_PROPAGATION(queue_name => 'Q_BILL_TRANSFER', destination => 'MES_LINK');

--同一数据库,不同用户

--DBMS_AQADM.SCHEDULE_PROPAGATION(queue_name => 'Q_BILL_TRANSFER', destination => '');

END;

-----------------------------------------------------------------------------------------------

-----------------------------------------------------------------------------------------------

--9.创建接收方(DB2 )相关代码,请打开文件 CODE_RECEIVER.SQL 在接收方(DB2 )数据库执行

-----------------------------------------------------------------------------------------------

-----------------------------------------------------------------------------------------------

--10.入列测试(该段代码每执行一次,只导入一条 Queue 数据)

declare

v_Message TS_BILL_TRANSFER;

v_MsgId RAW(16);

v_options DBMS_AQ.ENQUEUE_OPTIONS_T;

v_properties DBMS_AQ.MESSAGE_PROPERTIES_T;

v_Recipients DBMS_AQ.AQ$_RECIPIENT_LIST_T;

begin

v_Message:=TS_BILL_TRANSFER(

BILL_NO => 'B001',

LINE_NUMBER => 003,

STOCK_NO => '327',

TO_STOCK_NO => '303',

LOCATION  => 'B378',

PART_NO => '1100825',

PART_DESC => '扬声器 0.5W 8Ω 15×11×3.5 弹片 4#',

PART_QTY => 35,

OPERATOR => 'admin',

DATETIME_CREATED=> SYSDATE);

v_properties.priority := 1; --该消息的优先级别

v_options.visibility :=DBMS_AQ.IMMEDIATE;

dbms_aq.enqueue(queue_name => 'Q_BILL_TRANSFER',enqueue_options => v_options,message_properties =>

v_properties, payload => v_Message, msgid => v_MsgId);

dbms_output.put_line('encode success,msgid is '||v_MsgId);

end;

--查询QTABLE

SELECT * FROM QT_BILL_TRANSFER;

--查询操作的数据

SELECT * FROM INV_SP_BILL_TRANSFER;

SELECT * FROM Q_TEST;

begin

-- Call the procedure

q_sp_test;

end;

--QUEUE 相关查询

select * from user_queue_tables;

select * from user_queues;

select * from user_queue_subscribers;

select * from user_queue_schedules;

SELECT * FROM USER_QUEUE_PUBLISHERS;

转载于:https://www.cnblogs.com/blue-sword/archive/2013/01/08/BLUE-SWORD.html

如何创建基本的高级队列之一:创建发送方代码相关推荐

  1. 安卓应用安全指南 4.4.3 创建/使用服务高级话题

    安卓应用安全指南 4.4.3 创建/使用服务高级话题 原书:Android Application Secure Design/Secure Coding Guidebook 译者:飞龙 协议:CC ...

  2. linux内核多队列,Linux Kernel 中 Workqueue 使用系统默认队列和创建队列的方法

    关于workqueue,我们还是有很多话要说. 想必大家对workqueue相关的函数(schedule_work .queue_work.INIT_WORK.create_singlethread_ ...

  3. 消息队列控制灯代码_代码实现RabbitMQ死信队列的创建

    ‍ ‍前言:‍ ‍ 之前有写过死信队列的使用场景以及通过管控台创建死信.这次就通过代码实现死信队列的创建,同时也分享一下RabbitMQ封装的类. 准备: 1. 先准备一个死信队列(最后用来消费)的参 ...

  4. RTX5 | 消息队列01 - 创建消息队列

    文章目录 一.前言 二.实验的目的 三.API 3.1.osMessageQueueId_t 3.2.osMessageQueueAttr_t 3.3.osMessageQueueNew 四.代码 4 ...

  5. 安卓应用安全指南 4.1.3 创建/使用活动 高级话题

    4.1.3 创建/使用活动 高级话题 原书:Android Application Secure Design/Secure Coding Guidebook 译者:飞龙 协议:CC BY-NC-SA ...

  6. 使用持久内存开发工具包 (PMDK) 创建持久内存感知队列

    <使用持久内存开发工具包 (PMDK) 创建持久内存感知队列> 目录 简介 libpmemobj 中的 C++ 支持 libpmemobj 核心概念 使用 C++ 绑定实施队列 设计决策 ...

  7. linux队列数据结构,网络设备发送队列相关数据结构及其创建函数 (linux网络子系统学习 第十节 )...

    网络设备使用队列来管理数据帧的输出流量,每个队列可以使用队列策略算法来安排发送帧的优先级,使发送过程更高效.详细的队列策略处理属于流量控制子系统的内容,本人还没来的及研究,这里先不涉及.本章讨论没配置 ...

  8. Oracle 高级队列(AQ) 与JAVA JMS

    Oracle 高级队列AQ与JAVA JMS Oracle 高级队列是什么? 高级队列Advanced Queuing(AQ).它是oracle原生消息软件,这篇文章提供了一个AQ的高级概览.尤其是我 ...

  9. Oracle高级队列介绍

    原始链接:http://www.oracle-developer.net/display.php?id=411 oracle高级队列介绍 高级队列Advanced Queuing(AQ)在oracle ...

最新文章

  1. WKWebView中经常用到的操作
  2. C++ 虚函数成员和纯虚函数
  3. 第四周实践项目5 猴子选大王(循环链表)
  4. 是什么使你留在你现在的公司?
  5. 出门就背他了!可伸缩的背包,自由变大变小,还有防盗功能!
  6. 易懂分布式 | Kademlia算法
  7. 2021年中国地下光缆市场趋势报告、技术动态创新及2027年市场预测
  8. Leetcode 刷题笔记(二十六) ——动态规划篇之经典问题:打家劫舍
  9. Linux内核分析——第七章 链接
  10. 金橙子打标卡EZCAD软件各种延时说明
  11. PLSQL官方下载、安装和使用完全指南
  12. 教你如何做好移动支付行业
  13. [4G5G专题-124]:5G培训部署篇-2-主要信令流程
  14. 超级计算机在结构力学领域的应用,计算结构力学
  15. 使用RMAN恢复备库
  16. ppt压缩文件怎么压缩最小,ppt无损压缩
  17. 关于发送邮件附件中文文件名称乱码的问题
  18. codeforces csp复赛训练利器---初识
  19. 最新怀旧服服务器人口比例,魔兽世界怀旧服人口普查1月 2021年人口比例数据查询...
  20. Jetson nano开机自启动程序

热门文章

  1. 前端学习(3346):设计模式之工厂模式3
  2. 前端学习(3067):vue+element今日头条管理-频道筛选完成
  3. [html] 说说video标签中预加载视频用到的属性是什么?
  4. [vue] EventBus注册在全局上时,路由切换时会重复触发事件,如何解决呢?
  5. [js] 写一个格式化时间的方法
  6. 工作168:代码中的删除逻辑处理
  7. 工作111:直接写url
  8. 前端学习(2346):uniapp环境搭建
  9. 前端学习(2193):vuex概念和作用分析
  10. “约见”面试官系列之常见面试题之第五十五篇之清除浮动的方法(建议收藏)