首页 > 代码库 > 使用系统包DBMS_ALERT监视表
使用系统包DBMS_ALERT监视表
来源:http://blog.csdn.net/edcvf3/article/details/8285328
DBMS_ALERT支持异步捕获数据库事件.
现测试其捕捉表的各种改变,测试表为emp.
由于是异步的,我们这里需要开2个SQLPLUS窗口(两个session)
第一个session里写存储过程如下:
(注意要先给SCOTT用户权限哦,
grant execute on dbms_alert to scott)
[sql] view plain copy
print?
- 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,建立触发器如下:
[sql] view plain copy
print?
- 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
[sql] view plain copy
print?
- insert into emp(empno,ename) values(1234,‘w001‘);
- commit;
注意一定要commit;因为DBMS_ALERT是基于事务处理的.
一旦commit,第一个SQLPLUS里的session的等待状态会结束,输出结果如下:
[sql] view plain copy
print?
- 10:18:18 SCOTT@orcl> /
- [name:]EMP_TABLE_ALERT
- [msg:]20121212:table emp is changed
此包一般会用在开发里,在application里捕捉DB里发生的各种警报用于处理.
使用系统包DBMS_ALERT监视表
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。