oraclepipe传递消息.doc

  1. 1、本文档共10页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
使用oracle pipe传递消息 减小字体 增大字体   1.管道操作   1.1管道的通讯机制:   消息发送者把消息发送到本地消息缓冲区,本地消息缓冲区的消息发送到数据库指定实例的UGA区域,消息接收者从数据库管道获取消息并且放到本地消息缓冲区,然后从本地消息缓冲区读取消息。   由于数据库把管道建立在数据库实例的UGA区域,所以管道式可以实现同一个数据库实例下不同数据库会话之间的通讯的。   注意:管道消息是独立于事务的,也就是说不能回滚得,并且同一个管道消息只能被一个用户接收。也就是说要实现消息的广播,还需要在管道上的通讯机制上,自己做进一步的工作。   1种方式就是采用循环的方式,对需要接收消息的用户按照数据库会话的方式,一个循环下来对每一个数据库会话都发送一条消息(按照会话内通讯(消息的寻址)的方式进行处理)。   用户可以定义自己的协议来实现管道消息。参考下面的例子。   内容较多的消息的发送和接收。对于那些需要发送大的消息,应该考虑采用数据表的方式,通过管道可以发送消息的简要信息,真正的消息内容保存到一个数据表中去,   当用户通过管道获得消息后,解析消息,然后去相应的数据表获取真正的消息内容。   1.2发送消息/接收消息   ---发送消息到指定管道   declare   i integer;   j integer;   begin   for j in 1..10loop   dbms_pipe.pack_message(wdz||j);   end loop;   dbms_pipe.pack_message(end);   i := dbms_pipe.send_message(apple);   if i =0 then   dbms_output.put_line(ok--发送消息成功!);      end if;   end;      ---从指定管道接受消息   declare   i integer;   ch varchar2(200);   flag boolean :=false;   begin   i := dbms_pipe.receive_message(apple,100);   if(i=0)then   dbms_output.put_line(ok---准备接受消息);   else   flag := true;   end if;   while(not flag) loop   dbms_pipe.unpack_message(ch);   if(upper(ch)=END) then   flag := true;   dbms_output.put_line(接收消息完成);   else   dbms_output.put_line(消息内容=||ch);   end if;   end loop;   end;      1.3使用自己定义的协议发送/接收消息   -- Created on 2003-11-10 by wdz   ---发送消息到指定管道   ---自己定义的消息协议   ---用消息对的方式发送和接收消息。   ---消息对的第一个消息作为消息头表明消息对的第2个消息的类型。   ---消息对的第2个消息表明消息对的消息体   --- c 表示消息体为字符型   --- d 表示消息体为日期型   --- n 表示消息体为数字型   declare   i integer;   j integer;   begin      dbms_pipe.pack_message(c);   dbms_pipe.pack_message(消息体为字符型);   dbms_pipe.pack_message(d);   dbms_pipe.pack_message(sysdate);   dbms_pipe.pack_message(n);   dbms_pipe.pack_message(1000);      dbms_pipe.pack_message(end);   i := dbms_pipe.send_message(apple);   if i =0 then   dbms_output.put_line(ok--发送消息成功!);      end if;   end;         ---从指定管道接受消息   ---自己定义的消息协议   ---用消息对的方式发送和接收消息。   ---消息对的第一个消息作为消息头表明消息对的第2个消息的类型。   ---消息对的第2个消息表明消息对的消息体   --- c 表示消息体为字符型   --- d 表示消息体为日期型   --- n 表示消息体为数字型

文档评论(0)

gangshou + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档