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

/*

基本组成

发送方(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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/422006.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

c语言编程 float p,C语言编程经典例题

学习c语言编程的实战例题,非常典型的题目:编写一个函数,输入n为偶数时,调用函数求1/21/4...1/n,当输入n为奇数时,调用函数1/11/3...1/n(利用指针函数)1.程序分析:2.程序源代码:#include “stdio.h“ float …

c语言mergesort 参数,归并排序C语言兑现MergeSort

归并排序C语言实现MergeSort是建立在归并操作上的一种有效的排序算法。该算法是采用分治法(Divideand Conquer)的一个非常典型的应用。算法伪码&#xff1a;MERGE-SORT(A&#xff0c;p, r)if p < rthen q (p r) / 2MERGE-SORT(A&#xff0c;p, q)MERGE-SORT(A&#xff0c…

WPF中打印问题的探讨[转]

转自&#xff1a;http://blog.sina.com.cn/s/blog_624dc0120100ld6m.html 最近在做一个WPF方面的项目&#xff0c;在打印功能实现上费了很大劲。因为我原来是在做Winform方面的项目&#xff0c;接受WPF时感觉还很相似&#xff0c;可仔细往里做下去却发现两者外看相似&#xff0…

语法分析树(先看例子再看定义)

语法分析树&#xff08;先看例子再看定义&#xff09; 先讲例子 书上讲问题&#xff0c;先讲定义&#xff0c;一顿学术操作&#xff0c;让人云里雾里&#xff0c;然后出例子。其实这样往往让人觉得看书的过程就是放弃的过程。 关于语法分析树&#xff0c;我先从上篇文章的例…

C语言正函数nosign,C语言标准库函数查询手册.docx

球锣宜软瘠旱塾3abort功能异常终止程序头文件StdIib.h语法VOid abort(void);abs功能整数的绝对值头文件StdIib.h语法int abs(int: j);返回值整数j的绝对值。如果不能表示J的绝对值&#xff0c;那么函数的行为是未定义的。absread功能读磁盘绝对扇区函数头文件dos ? h语法int a…

spring 实例化bean的几种方法

1.普通的通过构造函数初始化&#xff0c;没有指定构造函数参数的就是用默认的无参的构造方法 <bean id"exampleBean" class"examples.ExampleBean"/><bean name"anotherExample" class"examples.ExampleBeanTwo"/> 构造函…

middle函数C语言,C语言函数调用栈(三)

6 调用栈实例分析本节通过代码实例分析函数调用过程中栈帧的布局、形成和消亡。6.1 栈帧的布局示例代码如下&#xff1a;//StackReg.c#include //获取函数运行时寄存器%ebp和%esp的值#define FETCH_SREG(_ebp, _esp) do{\asm volatile( \"movl %%ebp, %0 \n" \"…

c语言多个形参,C中子函数最多有几个形参

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼C89 31个&#xff0c;C99 127个。ANSI C892.2.4.1 Translation limitsThe implementation shall be able to translate and execute at least one program that contains at least one instance of every one of the following lim…

什么叫ERP软件

1.ERP是什么&#xff1f; erp是个管理系统&#xff01;是一个成套的统称&#xff01;构成&#xff1a;进销存BOM生产MRP质检(IQC/FQC/PQC)车间日报/简单排产应收应付固定资产实际成本算法自动财务。就是通过软件管理&#xff0c;实现最小的库存和最大的利益&#xff01; 2.什么…

android 杀 服务器,android busybox httpd搭建简单web服务器

安卓手机利用busybox中的httpd命令可以创建一个简单的web服务器。我们可以在终端模拟器中输入一下命令查看httpd的使用帮助。busybox httpd --help1|u0_a84cancro:/ $ busybox httpd --helpBusyBox v1.20.2-MIUI (2012-08-20 20:59:32 CST) multi-call binary.Usage: httpd [-i…

sublimeclang里面使用相对路径

在sublime的project里面&#xff0c;可以添加sublimeclang的options,比如这样 {"folders":[{"path": "/C/EverBox/gitCode/clangxx"}],"settings": {"sublimeclang_options": ["-Wall","-IC:\\EverBox\\gitC…

短信恢复 android,苹果手机短信恢复:安卓+苹果手机短信恢复教程,必须收藏!...

原标题&#xff1a;苹果手机短信恢复&#xff1a;安卓苹果手机短信恢复教程&#xff0c;必须收藏&#xff01;手机短信怎么恢复&#xff1f;日常生活中&#xff0c;大家或多或少会不小心把删除一些不必要的短信&#xff0c;比如注册某软件的验证码的短信&#xff0c;面试通知地…

Shell应用:批量将文件编码由gbk转utf-8

Shell应用&#xff1a;批量将文件编码由gbk转utf-8,实例代码&#xff1a; [plain]#!/bin/bash // batch_change_GB2312_to_UTF-8 cd directory find ./ -type f -name "*.java" | while read line;do echo $line iconv -f GB2312 -t UTF-8 $line > ${lin…

c语言立体图像编程,C语言-编程实例-三视图的画法

#includeint dx[12]{0,60,60,0,0,60,60,0,60,0,60,0}; /*确定组合体X坐标*/int dy[12]{0,0,120,120,0,0,40,40,80,80,120,120};/*确定组合体Y坐标*/int dz[12]{0,0,0,0,80,80,80,80,40,40,40,40};/*确定组合体Z坐标*/int ld[24]{0,1,2,3,0,4,5,6,7,4,10,11,9,8,10,2,3,11,8,6,9…

【js拾遗】名称空间

function NameSpace(ns) {if (!ns) {return null;}var arr ns.split(.);//第一次调用的时候window.utry的值为{};//第二次调用的时候window.utry的值为window.utry;window[arr[0]] window[arr[0]] || {};//obj是window.utry的引用var obj window[arr[0]];//result也是window…

Linux编程简介——VI

VI是Linux/Unix下标配的一个纯字符界面的文本编辑器。由于不支持鼠标功能&#xff0c;也没有图形界面&#xff0c;相关的操作都要通过键盘指令来完成&#xff0c;需要记忆大量命令。因此很多人不大喜欢它&#xff0c;但同时由于键盘的方式往往比鼠标来得快&#xff0c;一旦熟练…

xamarin android 标签,安卓端Tabbedpage调整在底部位置和标签及取消Android API28 以下的点击特效—-xamarin.forms学习笔记(一)...

使用tabbedpage时将安卓端导航放在底部,官网也有说明方法.总结:xmlns"http://xamarin.com/schemas/2014/forms"xmlns:x"http://schemas.microsoft.com/winfx/2009/xaml"xmlns:local"clr-namespace:aya"x:Class"aya.MainPage"xmlns:and…