基于应用抛出事件的 Jobs

define  payload 
CREATE OR REPLACE TYPE t_event_queue_payload AS OBJECT (
  事件  VARCHAR2(30)
);

创建队queue_table、queue,并启动queue
BEGIN
  -- Create a queue table to hold the event queue.
  DBMS_AQADM.create_queue_table(
    queue_table        => 'event_queue_tab',
    queue_payload_type => 't_event_queue_payload',
    multiple_consumers => TRUE,
    comment            => 'Queue Table For Event Messages');

  -- Create the event queue.
  DBMS_AQADM.create_queue (
    queue_name  => 'event_by_app_queue',
    queue_table => 'event_queue_tab');

  -- Start the event queue.
  DBMS_AQADM.start_queue (queue_name => 'event_by_app_queue');
END;
注意:这儿使用了前面创建的类型:t_event_queue_payload

建立基于事件的job
BEGIN
   DBMS_SCHEDULER.create_job (
      job_name        => 'event_by_app_based_job',
      job_type        => 'PLSQL_BLOCK',
      job_action      => 'begin INSERT INTO t_job_test VALUES (SYSDATE, ''event_by_app_based_job''); end;',                            
      start_date      => SYSTIMESTAMP,
      event_condition => 'tab.user_data.事件 = ''天王盖地虎''',
      queue_spec      => 'event_by_app_queue',
      enabled         => TRUE);
END;

建立proc来enqueue
CREATE OR REPLACE PROCEDURE p_send_msg AS
  l_enqueue_options     DBMS_AQ.enqueue_options_t;
  l_message_properties  DBMS_AQ.message_properties_t;
  l_message_handle      RAW(16);
  l_queue_msg           t_event_queue_payload;
BEGIN
  l_queue_msg := t_event_queue_payload('天王盖地虎');

  DBMS_AQ.enqueue(queue_name          => 'event_by_app_queue',
                  enqueue_options     => l_enqueue_options,
                  message_properties  => l_message_properties,
                  payload             => l_queue_msg,
                  msgid               => l_message_handle);
  COMMIT;
END;

测试:
SQL> exec p_send_msg;
PL/SQL procedure successfully completed

SQL> select * from t_job_test;
CREATED              DES
-------------------- --------------------------------------------------
2014-08-16 16:21:40  event_by_app_based_job
1 row selected

SQL> exec p_send_msg;
PL/SQL procedure successfully completed

SQL> select * from t_job_test;
CREATED              DES
-------------------- --------------------------------------------------
2014-08-16 16:21:40  event_by_app_based_job
2014-08-16 16:22:07  event_by_app_based_job
2 rows selected


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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值