动态网站制作指南 [  QQ表情  ]
[ 投票调查 ]
[ 企业邮箱 ]
[ 网站空间 ]
网络编程 | 站长之家 | 网页制作 | 图形图象 | 操作系统 | 冲浪宝典 | 软件教学 | 网络办公 | 邮件系统 | 网络安全 | 认证考试 | 系统进程
ASP源码 | .Net源码 | PHP源码 | JSP源码 | JAVA源码 | CGI源码 | VB源码 | C++源码 | Delphi源码 | PB源码 | VF源码 | 汇编 | 服务器
Firefox | IE | Maxthon | 迅雷 | 电驴 | BitComet | FlashGet | QQ | QQ空间 | Vista | 输入法 | Ghost | Word | Excel | wps | Powerpoint
asp | .net | php | jsp | Sql | c# | Ajax | xml | Dreamweaver | FrontPages | Javascript | css | photoshop | fireworks | Flash | Cad | Discuz!
当前位置 > 网站建设学院 > 网络编程 > 数据库 > SQL技巧
Tag:注入,存储过程,分页,安全,优化,xmlhttp,fso,jmail,application,session,防盗链,stream,无组件,组件,md5,乱码,缓存,加密,验证码,算法,cookies,ubb,正则表达式,水印,索引,日志,压缩,base64,url重写,上传,控件,Web.config,JDBC,函数,内存,PDF,迁移,结构,破解,编译,配置,进程,分词,IIS,Apache,Tomcat,phpmyadmin,Gzip,触发器,socket
网络编程:ASP教程,ASP.NET教程,PHP教程,JSP教程,C#教程,数据库,XML教程,Ajax,Java,Perl,Shell,VB教程,Delphi,C/C++教程,软件工程,J2EE/J2ME,移动开发
数据库:数据库教程,数据库技巧,Oracle教程,MySQL教程,Sybase教程,Access教程,DB2教程,数据库安全,数据库文摘
文章搜索服务
邮件订阅
输入你的邮件地址,
你将不会错过任何关于:
[ SQL技巧 ]的信息

本月文章推荐
.正确配置和使用SQL mail.
.讲解DBMS_STATS的分析表与备份分.
.SQL Server 2005 Express混合模式.
.SQL Server 最佳实践分析器使用小.
.讲解ASE12.5.1以后提供的WebServ.
.SQL IF..ELSE..在存储过程的使用.
.关于Sql server数据库日志满的快.
.SQL语句导入导出大全.
.讲解fedora4环境下安装ASE15的具.
.数据库的分页问题.
.查询数据库表和字段sql语句.
.Berkeley DB数据库管理系统的技术.
.Sql Server 2005 数据库维护计划.
.怎么样把sql server 2000的用户表.
.Sql Server中利用自定义函数完成.
.教你在SQL Server数据库中拆分字.
.SQL Server 2005-如何在SQL Serv.
.在SQL Server中通过.NET远程的执.
.使用特殊数据.
.教你如何用SQL备份和还原数据库.

借助两个开发包在PL/SQL中实现多进程通信

发表日期:2008-6-20 |


PL/SQL是基于Oracle的一个主流应用程序编程语言,它的主要特点是将SQL语句与过程化程序开发语言相结合,以实现更为复杂的商业逻辑。本文主要就其中多进程通信进行讨论。

显然,多进程技术是用来提高应用的并发性,进而提高整个系统的执行效率,那么如何在PL/SQL中实现多进程的通信呢?其实,PL/SQL其设计的初衷主要是增强SQL语句的功能,而没有考虑到其他编程语言的高级功能,所以在PL/SQL中实现多进程通信只能借助于Oracle提供的两个开发包:DBMS_PIPE和DBMS_ALERT。

1.DBMS_PIPE

该包提供多进程之间管道通信的方法,比如连接到同一个数据库的两个独立会话之间可以通过管道进行通信,另外也可以在存储过程和Pro*C之间进行通信,这样就大大地增强了PL/SQL的处理能力。该包主要提供两对函数:

pack_message(v_msg varchar2)-----将v_msg信息打包放入到缓冲器中,准备发送;

send_message(v_pipename varchar2)-----发送名为v_pipename的管道的缓冲器;

unpack_message(v_msg varchar2)-----将信息解析到v_msg中;

receive_message(v_pipename varchar2)----接受名为v_pipename的管道的缓冲器;

其执行的原理是:首先建立有名管道(这点熟悉unix很清楚),管道的发送端和接受端都有相应的缓冲器进行接受和发送处理,要注意的是,文本信息必须打包来发送,通过解析来读取信息。

为了理解前面的描述,下面列举一个两个会话之间通信的实例。

发送进程:

declare

v_pipename varchar2(30):='pipe1';

v_status integer;

begin

dbms_pipe.pack_message(' hello,this is sending process!');

v_status:=dbms_pipe.send_message(v_pipename);

if v_status !=0 then

dbms_output.put_line('error!');

end if;

end;

/

接受进程:

declare

v_pipename varchar2(30):='pipe1';

v_status integer;

v_msg varchar2(20);

begin

v_status:=dbms_pipe.receive_message(v_pipename);

if v_status !=0 then

dbms_output.put_line('error');

end if;

dbms_pipe.unpack_message(v_msg);

dbms_output.put_line(v_msg);

end;

/

2.DBMS_ALERT

与DBMS_PIPE类似,DBMS_ALERT可以实现多个进程(会话)之间的通信。其基本的执行过程为:首先建立一个报警通道,然后通过报警通道来发送报警信号;在接收端需要先注册该报警通道,对该通道进行监听,然后等待报警信号的到来。下面是该包中的主要函数说明:

dbms_alert.signal(报警管道名,待发送消息)---发送报警信息;

dbms_alert.reGISter(报警管道名)------注册报警管道;

dbms_alert.waitone(报警管道名,接受消息值,返回状态值)-------对报警管道进行监听,等待消息的到来;

同样,这里也给出使用DBMS_ALERT的一个实例。

发送进程:

declare

v_alertName varchar2(30):='alert1';

begin

dbms_alert.signal(v_alertName,' hello,this is sending process!');

commit;

end;

/

接受进程:

declare

v_alertName varchar2(30):='alert1';

v_status integer;

v_msg varchar2(20);

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');

end if;

dbms_output.put_line(v_msg);

end;

/

3.说明

DBMS_PIPE和DBMS_ALERT这两个包都可以进行多进程间的通信,但两者任然是有一些区别:

(1) 报警信号是同步的。报警信号直到会话发出Commit时才被发出;如果它所处的事务回滚,则该信号就不发送了。但是管道信号是异步的,而且其通信过程不受事务提交和回滚的影响。

(2) 沿着管道进行传递的消息只能被一个进程进行处理,其消息的接收方式是拷贝后删除,但是报警信号可以被多个进程所获得,即消息的接收方式仅仅是拷贝。

(3) 管道消息不仅可以传递文本信息,还可以传递其他信息,比如对象等,这一好处得益于其对消息的打包预处理;而报警消息只能是文本,不能是其他类型。

4.总结

近年来,虽然多进程应用有逐渐被多线程应用取代的趋势,但是多进程仍然有其适用的空间,希望读者通过本文初浅的介绍,对基于PL/SQL的多进程通信这一技术有一个初步的认识,这样为以后深入的开发打下一定的基础。

上一篇:SQLite数据库用来处理锁定情况的两个函数 人气:642
下一篇:触发器中的inserted表和deleted表介绍 人气:603
浏览全部PL/SQL的内容 Dreamweaver插件下载 常用网页广告代码全集
  最新网站源码 最新软件下载
2008-9-6 Movie34电影搜索引擎 v3.0
2008-9-6 wap2.0仿帝国建站喜用 v2.0
2008-9-6 免费人才招聘网 宽屏版 v3.01
2008-9-6 喜喔喔视频采集程序 v1.0 beta
2008-9-6 ASP客户管理系统
2008-9-6 主流驿站中秋祝福程序
2008-9-6 php实现msn协议的类
2008-9-5 Coppermine Photo Gallery v1.4.
2008-9-5 清松网络日记本 v2.4
2008-8-23 Mini WinMount V0.4
2008-8-23 Vista优化大师3.11正式版
2008-8-23 Wine 1.13
2008-8-23 KlipFolio 5.0 Build 5899-80
2008-8-23 Windows Sysinternals Desktops
2008-8-23 OneTap Movies1.2破解版
2008-8-23 AnnotaterPDF阅读1.1.503 破解版
2008-8-23 SoundMeter分贝测量仪 v1.0汉化破
2008-8-23 iDrum音乐节拍1.0破解版
  发表评论
姓 名: 验证码:
内 容:
站长工具:网站收录查询 | Google PR查询 | ALEXA排名查询 | CSS在线编辑器 | 广告代码 | Html转换js | js/vbs加密 | md5加密 | 进制转换
实用工具:汉字翻译拼音 | 符号对照表 | 个税计算 | 经典小工具 | 汉字简繁转换 | 普通单位换算 | 公制单位换算 | 生辰老黄历 | 国内电话区号 国家代码与域名缩写 | 文字加密解密 | 健康查询 | 万年历 | 汉字横竖排版 | 手机号码查询 | 计算器 | ip搜索
业务联系 | 广告刊登 | 频道合作 | 投稿荐稿 | 联系方式 | 加入收藏 | RSS订阅
Copyright © 2000-2008 www.knowsky.com All rights reserved | 网络实名:动态网站制作指南 | 沪ICP备05001343号