oracle系统包——dbms_alert用法
oracle内部提供的在数据库内部和应用程序间通信的方式有以下几种:
1.警报,就是DBMS_ALERT包提供的功能;
2.管道,由DBMS_PIPE提供;
3.高级队列,这个就很复杂,当然提供的功能也是很高级的。
当然还可以使用外部过程,比如用PL/SQL封装外部的基于C的DLL或JAVA也能实现数据库和应用程序间的通信。 要使用这些功能,必须知道各个功能的特点,根据需要选用。 警报和事务相关的,是异步发送的;管道是与事务无关的,是同步发送的。
dbms_alert用于生成并传递数据库预警信息。使用包DBMS_ALERT,则必须以SYS登陆,为该用户授予执行权限。
sql>conn sys/oracle as sysdba
sql>grant execute on dbms_alert to scott;
1.register:用于注册预警事件
示例如下:
sql>exec dbms_alter.register('alter1');
2.remove:用于删除会话不需要的预警事件.
3.removeall:用于删除当前会话所有已注册的预警事件
语法如下:dbms_alter.removeall;
4.set_defaults
用于设置检测预警事件的时间间隔,默认时间间隔为5秒
5.signal:用于指定预警事件所对应的预警消息.
6.waitany:用于等待当前会话的任何预警事件,并且在预警事件发生时输出相应信息.在执行该过程之前,会隐含地发出COMMIT.
语法如下:
dbms_alter.waitany (
name out varchar2,
message out varchar2,
status out integer,
timeout in number default maxwait
);
注:status用于返回状态值,返回0表示发生了预警事件,返回1表示超时;timeout用于设置预警事件的超时时间.
7.waitone:
用于等待当前会话的特定预警事件,并且在发生预警事件时输出预警消息.
语法同上
警报的使用:
简单来说,警报是在服务器端发出,然后在客户端接收,这就需要在客户端有一个线程来监听警报。现在拿SQLPLUS做个例子,打开两个SQLPLUS,分别用提示符SQL1和SQL2表示。
1、首先应先授予用户使用DBMS_ALERT的权限。登录到SYS用户下,执行一下语句:
conn sys/oracle as sysdba
grant execute on dbms_alert to scott;
2、发送进程(服务器端发出)
SQL1>DECLARE
V_ALERTNAME VARCHAR2(30) := 'alert1';
BEGIN
DBMS_ALERT.SIGNAL(V_ALERTNAME, 'hello, this is sending process!');
COMMIT; --必须COMMIT,警报才会真正被发出
END;
/
3、接受进程(客户端接收)
SQL2>set serveroutput ON;
SQL2>DECLARE
V_ALERTNAME VARCHAR2(30) := 'alert1';
V_STATUS NUMBER;
V_MSG VARCHAR2(100);
BEGIN
DBMS_ALERT.REGISTER(V_ALERTNAME); --注册要接收信息的警报器
DBMS_ALERT.WAITONE(V_ALERTNAME, V_MSG, V_STATUS);
IF V_STATUS != 0 THEN
DBMS_OUTPUT.PUT_LINE('error');
ELSE
DBMS_OUTPUT.PUT_LINE(V_MSG);
END IF;
END;
/
注意:接收者要接收警报必须执行等待过程,等待警报的到来,否则不会得到任何警报的。
用二种方法测试一下:
方法一:先执行步骤2,再执行步骤3。这时可以获得警报
方法二:先执行步骤3,再执行步骤2。这时不能获得任何警报,执行步骤3的SESSION处于等待状态,当下一时间点再次执行步骤2时,就可以获得警报。
警报可以是一对一,也可以是一对多的,即一个警报可以同时被多个接收者接收。
oracle系统包——dbms_alert用法的更多相关文章
- oracle系统包——dbms_random用法及order by 小结(转)
dbms_random是一个可以生成随机数值或者字符串的程序包. 这个包有initialize().seed().terminate().value().normal().random().strin ...
- oracle系统包——dbms_job用法(oracle定时任务)
用于安排和管理作业队列,通过使用作业,可以使ORACLE数据库定期执行特定的任务. 一.dbms_job涉及到的知识点1.创建job:variable jobno number;dbms_job.su ...
- oracle系统包——DBMS_PIPE用法
DBMS_PIPE包用于在同一例程(实例)的不同会话之间进行通信:注意,如果用户要执行包dbms_pipe中的过程和函数,则必须要为用户授权. sql>conn sys/oracle as sy ...
- oracle系统包——dbms_random用法
oracle中随机数的包的源文件目录:{oracle_home}\rdbms\admin\dbmsrand.sql 1.返回0~1间的随机数(包括0和1)sql> select dbms_ran ...
- oracle系统包—-dbms_output用法
dbms_output包主要用于调试pl/sql程序,或者在sql*plus命令中显示信息(displaying message)和报表,譬如我们可以写一个简单的匿名pl/sql程序块,而该块出于某种 ...
- oracle系统包——dbms_transaction用法
用于在过程,函数和包中执行sql事务处理语句. 1.read_only用于开始只读事务,其作用与sql语句set transaction read only完全相同2.read_write用于开始读写 ...
- oracle系统包——dbms job用法(oracle定时任务)
用于安排和管理作业队列,通过使用作业,可以使ORACLE数据库定期执行特定的任务. 一.dbms_job涉及到的知识点1.创建job:variable jobno number;dbms_job.su ...
- .Net程序员学用Oracle系列(29):PLSQL 之批量应用和系统包
1.批量数据操作 1.1.批量生成数据 1.2.批量插入数据 2.批量生成脚本 3.生成数据字典 4.常见系统包 4.1.DBMS_OUTPUT 4.2.DBMS_RANDOM 4.3.其它系统包及常 ...
- ORACLE中DBMS_SQL的用法
ORACLE中DBMS_SQL的用法 对于一般的select操作,如果使用动态的sql语句则需要进行以下几个步骤: open cursor---> parse---> define ...
随机推荐
- Android-自定义RadioButton
1.控件RadioButton需要用RadioGroup包裹起来,才能使用2.RadioButton必须设置ID才能实现单选功能3.RadioGroup有方向(垂直方向 和 水平方向)默认是垂直方向 ...
- 20145233《网络对抗》Exp5 MSF基础应用
20145233<网络对抗>Exp5 MSF基础应用 实验问题思考 什么是exploit,payload,encode exploit是发现了的可以利用的安全漏洞或者配置弱点,这类模块存储 ...
- Arcgis Android 常见问题
关于arcgis android 安装包较大的问题 如果想缩小大小,可以只保留armeabi,只是这样就不支持x86类型cpu的手机了. 可以考虑做成单独的版本,供用户下载. 即打2个包,一个供普通a ...
- SQL 语句case when
简介 case when 一般有两种书写方式,多用于查询判断 1. case 列名 when '' then '空' ' then '成功' ' then '失败' else '其他' end as ...
- html中的table导出Excel
演示地址: http://www.jq22.com/yanshi3312 具体代码: <!DOCTYPE html> <html lang="zh-CN"> ...
- 日志收集系统elk
目录 elk简介 官方帮助 rsyslog rsyslog日志采集介绍与使用 综合实验 案例一: 单机ELK部署 案例二. JAVA环境配置,部署 filebeat+Elasticsearch apa ...
- [arc076F]Exhausted? 贪心+堆
Description 有m个椅子,第i个在位置i,每个椅子只能坐一个人. 有n个人,第i个人能坐的椅子的位置j需满足j≤Li或j≥Ri. 现在你可以添加若干个椅子,可以放在任意实数位置.问最 ...
- 洛谷T46780 ZJL 的妹子序列(生成函数)
题面 传送门 题解 这居然是一道语文题? 首先不难看出,因为每一次相邻元素交换最多减少一个逆序对,所以至少\(m\)次交换就代表这个序列的逆序对个数为\(m\) 我们考虑一下,假设现在已经放完了\(i ...
- SpringMVC 的初理解
项目中用到了jetty,springboot两种构建服务器的方式,jetty是一种嵌入式的方式,部署启动都很灵活,springboot最大的优点就是很多配置文件都自己集成好了,虽然用了这么多好的框架, ...
- easyui页面上显示和PL/SQL编码问题
在页面上,只需要显示人们看的懂的文字就行,但是在数据库里面就不一定了,一般情况下,在数据库里面存字母,数字等除了汉字以外的字符,存汉字有个问题,就是有时候不同oracle数据库的客户端会出现乱码问题: ...