首页 
资讯中心 业内活动 行业人物 网站运营 站长商城 精品学院 站外休闲 关注汶川
特别专题 | 行业新闻 | 人物访谈 | 专栏作家 | 求职招聘 | 行业公司 | 网站名录 | 好站推荐 | 站长工具 | 站长大会
·包头首届站长大会 ·我区网站备案通道
·企业网站评比大赛 ·本站开展IDC托管
·内蒙古精品网址站 ·10秒即可成为写手
   当前位置:内蒙古IT实验室 内蒙古互联网实验室 内蒙古站长 >> 精品学院 >> 数据库类 >> Oracle >> 浏览文章
借助两个开发包在PL/SQL中实现多进程通信
作者:璞玉 来源:赛迪网 收藏: 投稿

    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的多进程通信这一技术有一个初步的认识,这样为以后深入的开发打下一定的基础。 
 

浏览:  


人支持

发表评论】【告诉好友】【打印此文】【收藏此文】【关闭窗口
 最新推荐
网智科技诚聘IT精英共创内蒙古IT事业
广电总局公布视频牌照大名单 共247家机构获得
中国铁通并入中国移动 王建宙任集团总经理  
女子网上视频辱骂四川灾区人民被抓(图)
哀悼地震死难同胞网站变灰色
警方提醒市民:有些捐款救援短信是骗局
网络捐赠成最快方式 支付宝捐赠通道开通
四川汶川发生地震 百度贴吧网友6分钟内播报
紫金山科技杨凤彦经理谈DIY
关于地震的消息最早从那里获得,QQ群?
 相关文章
  • 暂无相关链接
  •  文章评论:
     最新文章
    借助两个开发包在PL/SQL中实现多进程通
    讲解杀死Oracle数据库死锁进程的具体方
     编辑推荐
    网智科技诚聘IT精英共创内蒙古IT事业
    广电总局公布视频牌照大名单 共247家机构获得
    中国铁通并入中国移动 王建宙任集团总经理  
    女子网上视频辱骂四川灾区人民被抓(图)
    哀悼地震死难同胞网站变灰色
    警方提醒市民:有些捐款救援短信是骗局
    网络捐赠成最快方式 支付宝捐赠通道开通
    四川汶川发生地震 百度贴吧网友6分钟内播报
    紫金山科技杨凤彦经理谈DIY
    关于地震的消息最早从那里获得,QQ群?
     热门排行
    哀悼地震死难同胞网站变灰色
    北京市有望在IT行业试行在家办公
    谁来保护弱势站长群体的信息安全?
    IT实验室2007年度网络宣传大事例
    访谈:客齐集员工—内蒙古小伙儿姜丰波
    北方新报做媒 一对网络情侣喜结良缘
    3158商机网与IT实验室08元旦联谊活动MTV
    IT实验室与3158商机网元旦活动
    震撼世界!2008年互联网趋势预测
    邢明:明后两年将是互联网的社区年
     
    孵化网站:
    内蒙古文学网 内蒙古医药网 内蒙古网络广告网 内蒙古旅游在线 内蒙古家居装饰网 内蒙古汽车网 新闻网博客频道 婴幼儿保健网
    内蒙古好网 内蒙古房产网 内蒙古拼客 内蒙古大学生网 内蒙古物流网          
    合作伙伴:
    内蒙古新闻网 图吧 飞普科技 盛开元广告 人间指南 内蒙古商报 乌海在线 互联网实验室 中国网站排名  
    合作媒体:
    DoNews IT中国 站长网 落伍者 中国站长站 AdminTech 内蒙古新闻网 北方新报 内蒙古晨报 内蒙古商报 呼和浩特晚报
    友情链接:
    内蒙古电子杂志网内蒙古第一站BIOS之家子寒热点互联网分享IT每一天山西站长网
    内蒙古动漫电影网山炮摇滚视频网草原论坛阿尔山旅游网IT技术部中国生活指南网呼和浩特人才网
    内蒙古拍易拍信息网串串网站导航站长中国网读书志九上网导航 罗伊-电子商务信息网络安全调查
    计算机病毒处理中心鄂尔多斯之窗内蒙信息港内蒙信息网包头热线河套生活网塞外传媒网
    青城之恋包头移动公寓网酷博网内蒙古生活信息呼和浩特餐饮娱乐网包头大学生网7度POP网
    呼和浩特热线蒙古文化媒体网IT动力源呼和浩特好评网牧人部落呼伦贝尔旅游网
    关于本站 - 业务合作 - 广告合作 - 联系站长 - 设为首页 - 加入收藏 - 友情连接 - 雁过留声
    内蒙古IT实验室 版权所有 蒙ICP备05002086
    本站特约顾问:资深的互联网专家黄相如
    Copyright(C) 2008 NmgLabs.com All Rights Reserved