EXECAQ.sql

EXECAQ.sql

 

--2.停止和删除aq
exec dbms_aqadm.stop_queue('sms_mt_queue');
exec dbms_aqadm.drop_queue('sms_mt_queue');
exec dbms_aqadm.drop_queue_table('ss_mt_tab');
/

--3.创建队列表
begin dbms_aqadm.create_queue_table(queue_table=>'ss_mt_tab', queue_payload_type=>'SYS.AQ$_JMS_TEXT_MESSAGE',multiple_consumers => true); end;
/

--4.创建队列
exec dbms_aqadm.create_queue(queue_name=>'sms_mt_queue', queue_table=>'ss_mt_tab');
/
--5.启动队列
EXECUTE DBMS_AQADM.START_QUEUE (Queue_name => 'SMS_MT_QUEUE');

--6.调度队列
exec  dbms_aqadm.schedule_propagation(queue_name => 'SMS_MT_QUEUE',latency => 0);
/
--7.aq处理包
create or replace package PKG_AQ is

  -- Author  : bgz
  -- Created : 2011-06-22 14:01:37
  -- Purpose : AQ处理功能包

  --Purpose: 增加消息队列订阅者
  --para:  v_queueName,队列名称;v_subscriber,订阅者名称
  --author: bgz
  --date: 2011-06-29
  PROCEDURE addSubscriber(v_queueName  in varchar2,v_subscriber in varchar2);

  --Purpose: 发送消息
  --para:  v_messageText,消息文本内容;v_kind(表名);v_tag;v_fldid;v_opetionType,消息类型:DESTRORY_ALL
  --author: bgz
  --date: 2011-06-29
  procedure sendMessage(v_messageText in varchar2,v_kind in varchar2,v_tag in varchar2,v_fldid in varchar2, v_opetionType in varchar2 default null);
end PKG_AQ;
/
create or replace package body PKG_AQ is

  PROCEDURE addSubscriber(v_queueName in varchar2,v_subscriber in varchar2) as
  begin
    dbms_aqadm.add_subscriber (queue_name => v_queueName,subscriber => sys.aq$_agent(v_subscriber,null,null));
  end addSubscriber;


  PROCEDURE sendMessage(v_messageText in varchar2,v_kind in varchar2,v_tag in varchar2,v_fldid in varchar2, v_opetionType in varchar2 default null) as
    message            SYS.AQ$_JMS_TEXT_MESSAGE;
    enqueue_options    dbms_aq.enqueue_options_t;
    message_properties SYS.dbms_aq.message_properties_t;
    msgid raw(16);

    java_exp           exception;
    pragma EXCEPTION_INIT(java_exp, -24197);
  begin
    -- Consturct a empty bytes message object
    message := SYS.AQ$_JMS_TEXT_MESSAGE.construct;

    message.set_text(v_messageText);

    -- Shows how to set JMS user properties
    message.set_string_property('kind', v_kind);
    message.set_string_property('tag', v_tag);
    message.set_string_property('fldid', v_fldid);
    message.set_string_property('operationtype', v_opetionType);

    -- Enqueue this message into AQ queue using DBMS_AQ package
    dbms_aq.enqueue(queue_name => 'SMS_MT_QUEUE',
                    enqueue_options => enqueue_options,
                    message_properties => message_properties,
                    payload => message,
                    msgid => msgid);
                    EXCEPTION
    WHEN OTHERS THEN    
      RETURN;
  end sendMessage;
end PKG_AQ;
/

--8.处理大量aq消息缓存
create table TSM_AQ_MESSAGE_CACHE
(
  FLDTABLE         VARCHAR2(256),
  FLDID            VARCHAR2(256),
  FLDENTITY        VARCHAR2(256),
  FLDOPERATIONTYPE VARCHAR2(128)
)
/
-- Add comments to the table
comment on table TSM_AQ_MESSAGE_CACHE
  is '缓存处理AQ发送的消息';
-- Add comments to the columns
comment on column TSM_AQ_MESSAGE_CACHE.FLDTABLE
  is '触发消息的表名';
comment on column TSM_AQ_MESSAGE_CACHE.FLDID
  is '触发消息的记录ID';
comment on column TSM_AQ_MESSAGE_CACHE.FLDENTITY
  is '消息关联的实体配置信息';
comment on column TSM_AQ_MESSAGE_CACHE.FLDOPERATIONTYPE
  is '对触发消息的表的操作类型,ADD:UPDATE:DELETE';
/

--9.在实体表和实体字段表上增加生成aq消息的触发器
create or replace trigger TRI_ENTITY_CONFIG_CACHE_ALL
  after update on tsm_entity_config

declare
  cursor cEntityConfig is select * from tsm_aq_message_cache t where upper(t.fldtable)='TSM_ENTITY_CONFIG';
  nCount number(9);
begin
  select count(*) into nCount from tsm_aq_message_cache t where upper(t.fldtable)='TSM_ENTITY_CONFIG';
  if(nCount>50) then
    Pkg_AQ.sendMessage('tsm_entity_config','tsm_entity_config','','','DESTROY_ALL');
  else
    for config in cEntityConfig  loop
      Pkg_AQ.sendMessage('tsm_entity_config','tsm_entity_config',config.fldentity,config.fldid);
    end loop;
  end if;
  delete from tsm_aq_message_cache t where upper(t.fldtable)='TSM_ENTITY_CONFIG';
end TRI_ENTITY_CONFIG_CACHE_ALL;
/
create or replace trigger TRI_ENTITY_CONFIG_CACHE_DELETE
  after delete on tsm_entity_config
  for each row
declare
  
begin
   Pkg_AQ.sendMessage('tsm_entity_config','tsm_entity_config',:old.Fldtag,:old.Fldid);  
end TRI_ENTITY_CONFIG_CACHE_UPDATE;
/
create or replace trigger TRI_ENTITY_CONFIG_CACHE_UPDATE
  after update on tsm_entity_config
  for each row
declare
  
begin
   insert into TSM_aq_message_cache(Fldtable,Fldid,Fldentity ,Fldoperationtype) values
   ('tsm_entity_config',:new.fldid,:new.fldtag,'UPDATE');
  
end TRI_ENTITY_CONFIG_CACHE_UPDATE;
/
create or replace trigger TRI_ENT_FIELD_CONFIG_CACHE_ALL
  after update on tsm_entity_field_config

declare
  cursor cEntityConfig is select * from tsm_aq_message_cache t where upper(t.fldtable)='TSM_ENTITY_FIELD_CONFIG';
  nCount number(9);
begin
  select count(*) into nCount from tsm_aq_message_cache t where upper(t.fldtable)='TSM_ENTITY_FIELD_CONFIG';
  if(nCount>100) then
    Pkg_AQ.sendMessage('TSM_ENTITY_FIELD_CONFIG','TSM_ENTITY_FIELD_CONFIG','','','DESTROY_ALL');
  else
    for config in cEntityConfig  loop
      Pkg_AQ.sendMessage('TSM_ENTITY_FIELD_CONFIG','TSM_ENTITY_FIELD_CONFIG',config.fldentity,config.fldid);
    end loop;
  end if;
  delete from tsm_aq_message_cache t where upper(t.fldtable)='TSM_ENTITY_FIELD_CONFIG';
end TRI_ENT_FIELD_CONFIG_CACHE_ALL;
/
create or replace trigger TRI_FIELD_CONFIG_CACHE_ADD
  after insert on tsm_entity_field_config
  for each row
declare
  -- local variables here
begin
  Pkg_AQ.sendMessage('tsm_entity_field_config','tsm_entity_field_config',:NEW.Fldentityid,:new.fldid);
end TRI_FIELD_CONFIG_CACHE_ADD;
/
create or replace trigger TRI_FIELD_CONFIG_CACHE_DELETE
  after delete on tsm_entity_field_config
  for each row
declare
  
begin
    Pkg_AQ.sendMessage('tsm_entity_field_config','tsm_entity_field_config',:old.Fldentityid,:old.Fldid);
   
end TRI_FIELD_CONFIG_CACHE_DELETE;

/

create or replace trigger TRI_FIELD_CONFIG_CACHE_UPDATE
  after update on tsm_entity_field_config
  for each row
declare
  
begin
    insert into TSM_aq_message_cache(Fldtable,Fldid,Fldentity ,Fldoperationtype) values
   ('tsm_entity_field_config',:new.fldid,:new.fldentityid,'UPDATE');
end TRI_FIELD_CONFIG_CACHE_UPDATE;
/

--10.清空aq表中的记录
truncate table aq$_ss_MT_tab_D;
truncate table aq$_ss_MT_tab_g;
truncate table aq$_ss_MT_tab_h;
truncate table aq$_ss_MT_tab_i;
truncate table aq$_ss_MT_tab_p;
truncate table aq$_ss_MT_tab_s;
truncate table aq$_ss_MT_tab_t;
/

exit

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值