报警是Oracle中单向的、以事务提交为基础的对数据库报警事件的异步报警通知,比如可以在数据库数据发生变化时,某个字段的值发生变化时,通过报警向用户发送电子邮件通知。
报警是基于事务的,意味着除非能够报警的事务被提交,否则等过过程中的事务不会获得报警。
要使用DBMS_ALERT
包,需要以DBA身份登录,为用户赋权:
GRANT EXECUTE ON DBMS_ALERT TO scott;
报警需要定义报警的发布方和接收方,对应同一个会话中的两个进程或者是不同会话中的进程。一个程序可以注册多个命名的报警,然后使用WAIT和WAITANY等待其中的任何一个报警产生。
注册报警事件REGISTER
在一个会话中可以注册多个报警,语法如下:
DBMS_ALERT.REGISTER(name IN VARCHAR2);
等待特定报警WAITONE
该过程用于等待当前会话中特定的报警事件,并且在发生报警事件时输出报警消息,该过程在执行之前会隐含地发出COMMIT,语法如下:
DBMS_ALERT.WAITONE(name IN VARCHAR2,
message OUT VARCHAR2,
status OUT INTEGER,
timeout IN NUMBER D