使用系统包DBMS_ALERT监视表

DBMS_ALERT支持异步捕获数据库事件.

现测试其捕捉表的各种改变,测试表为emp.

由于是异步的,我们这里需要开2个SQLPLUS窗口(两个session)

第一个session里写存储过程如下:

(注意要先给SCOTT用户权限哦,

grant execute on dbms_alert to scott)

declare
v_n varchar2(30);
v_m varchar2(100);
v_i integer;
begin
dbms_alert.removeall;
dbms_alert.register('emp_table_alert');
dbms_alert.waitany(v_n,v_m,v_i);
if l_i=0 then
dbms_output.put_line('[name:]'||l_n);
dbms_output.put_line('[msg:]'||l_m);
end if;
dbms_alert.removeall;
end;
/

执行此存储过程后,此session会处于等待状态。。。

我们重新开一个sqlplus,建立触发器如下:

create or replace trigger emtring
after insert or update or delete on emp
begin
dbms_alert.signal('emp_table_alert',to_char(sysdate,'yyyymmdd')||':table emp is changed');
end;


其中dbms_alert.signal用来发送警报,在此session下,进行一些改变,如insert

 insert into emp(empno,ename) values(1234,'w001');
 commit;

 注意一定要commit;因为DBMS_ALERT是基于事务处理的.

一旦commit,第一个SQLPLUS里的session的等待状态会结束,输出结果如下:

10:18:18 SCOTT@orcl> /
[name:]EMP_TABLE_ALERT
[msg:]20121212:table emp is changed


 

此包一般会用在开发里,在application里捕捉DB里发生的各种警报用于处理.


 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值