动态网站制作指南 [  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!
当前位置 > 网站建设学院 > 网络编程 > 数据库 > Oracle教程
Tag:注入,存储过程,分页,安全,优化,xmlhttp,fso,jmail,application,session,防盗链,stream,无组件,组件,md5,乱码,缓存,加密,验证码,算法,cookies,ubb,正则表达式,水印,索引,日志,压缩,base64,url重写,上传,控件,Web.config,JDBC,函数,内存,PDF,迁移,结构,破解,编译,配置,进程,分词,IIS,Apache,Tomcat,phpmyadmin,Gzip,触发器,socket
数据库:数据库教程,数据库技巧,Oracle教程,MySQL教程,Sybase教程,Access教程,DB2教程,数据库安全,数据库文摘
文章搜索服务
邮件订阅
输入你的邮件地址,
你将不会错过任何关于:
[ Oracle教程 ]的信息

本月文章推荐
.Windows下管理Oracle9i服务.
.从四大方面介绍 Oracle 的数据字.
.Oracle9i表连接.
.讲解exp时对密码中含“)”的处理.
.dual表是什么表?.
.Oracle 10G 新特性简介.
.在SuSE 9.1 professional安装Ora.
.Oracle数据库系统使用经验.
.oracle817视图中object_type的&#.
.教你如何收集Oracle进程中SQL跟踪.
.多个数据库时 如何设置默认数据库.
.获取FMB中所有的代码(触发器和程.
.Oracle数据库 监看lock script.
.Oracle中imp导入相同的两个用户的.
.轻松掌握Oralce数据库常用预定义.
.分析和解决ora-4030错误.
.在 Oracle10g 上构建 PL/SQL Web.
.Mandrake9.0的启动过程(从init开.
.心得共享:Oracle经验技巧集锦.
.Oracle 8(8.0.5)标准版安装指南.

使用oracle pipe传递消息

发表日期:2008-2-9 |



  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 表示消息体为数字型
  declare
  i integer;
  ch varchar2(200);
  ch2 varchar2(200);
  msgDate date;
  msgNum number;
  msgString varchar2(1000);
  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
  if ch='d' then
  dbms_pipe.unpack_message(msgDate);
  dbms_output.put_line('日期消息内容='to_char(msgDate,'yyyy-mm-dd hh24:mi:ss'));
  elsif ch='n' then
  dbms_pipe.unpack_message(msgNum);
  dbms_output.put_line('数字型消息内容='to_char(msgNum));
  elsif ch='c' then
  dbms_pipe.unpack_message(msgString);
  dbms_output.put_line('字符型消息内容='msgString);
  end if ;
  end if;
  end loop;
  end;
  
  1.4会话内通讯(消息的寻址)
  -- Created on 2003-11-10 by wdz
  ---从在当前数据库会话内使用管道发送消息
  declare
  i integer;
  j integer;
  begin
  dbms_pipe.pack_message('测试发送字符串消息');
  dbms_pipe.pack_message(sysdate);
  dbms_pipe.pack_message(2000);
  dbms_pipe.pack_message('最后一条消息');
  ---- 使用 dbms_pipe.unique_session_name来指定管道名称,这样可以按照数据库会话来实--现会话内通讯,当然也可以自己来定义1种会话的命名方式,只要能够名称按照会话名字唯一--就可以了。

  i := dbms_pipe.send_message(dbms_pipe.unique_session_name);
  if i =0 then
  dbms_output.put_line('ok--发送消息成功!');
  end if;
  end;
  
  ---- -- Created on 2003-11-10 by wdz
  ---从在当前数据库会话内使用管道接受消息
  ---- 使用 dbms_pipe.unique_session_name来指定管道名称,这样可以按照数据库会话来
  --实--现会话内通讯,当然也可以自己来定义1种会话的命名方式,只要能够名称按照会话名字唯一--就可以了。
  
  declare
  i integer;
  ch varchar2(1000);
  msgDate date;
  msgNum number;
  msgString varchar2(1000);
  flag boolean := false;
  begin
  i := dbms_pipe.receive_message(dbms_pipe.unique_session_name, 100);
  if (i = 0) then
  dbms_output.put_line('ok---预备接受消息');
  else
  flag := true;
  end if;
  while (not flag) loop
  i := dbms_pipe.next_item_type;
  if (i = 0) then
  flag := true;
  dbms_output.put_line('##接收消息完成');
  elsif i = 12 then-- 12 date
  dbms_pipe.unpack_message(msgDate);
  dbms_output.put_line('日期消息内容=' to_char(msgDate, 'yyyy-mm-dd hh24:mi:ss'));
  elsif i =6 then --6 number
  dbms_pipe.unpack_message(msgNum);
  dbms_output.put_line('数字型消息内容=' to_char(msgNum));
  elsif i = 9 then -- 9 varchar2
  dbms_pipe.unpack_message(msgString);
  dbms_output.put_line('字符型消息内容=' msgString);
  end if;
  end loop;
  end;
  
  1.5.执行权限
  拥有DBA权限的用户可以在pl/sql 块访问dbms_pipe,但是不能在存储过程执行。因为该包禁止角色执行。应该是通过dba把dbms_pipe的execute权限分配给指定用户。
  也就是一个用户即使是dba也需要获得dbms_pipe的execute权限,才能在存储过程中使用。
上一篇:关于Oracle存储过程测试 人气:849
下一篇:如何以表为数据源导入成为List_item的数值 人气:401
浏览全部Oracle教程的内容 Dreamweaver插件下载 常用网页广告代码全集
  最新网站源码 最新软件下载
2008-9-7 站长中国企业(公司)网站系统 v4.2
2008-9-7 PBDigg v2.0 Build 20080821
2008-9-7 玩玩小游戏FLASH系统 v2.1
2008-9-7 522QQ在线电视直播程序 v1.1
2008-9-7 Pcook cms 文章管理系统 (老Y CM
2008-9-7 仿代码小说小偷系统 v1.0
2008-9-7 百度一搜集成搜索管理系统
2008-9-7 小贤统计器 v1.0
2008-9-7 UCenter Home-中秋搏饼插件 v1.2
2008-9-7 iBlacklist通话黑名单汉化破解补
2008-9-7 EndlessWalls无尽壁纸 v1.0.4破解
2008-9-7 Dynolicious车载测量仪v1.1破解版
2008-9-7 iVoodoo巫毒娃娃1.0.1破解版
2008-9-7 iWallpape精品墙纸1.2破解版
2008-9-7 iChillout自然音效工具1.1破解版
2008-9-7 Todo计划提醒1.2破解版
2008-9-7 allRadio电台集合1.01破解版
2008-9-7 My Money个人理财1.0破解版
  发表评论
姓 名: 验证码:
内 容:
站长工具:网站收录查询 | Google PR查询 | ALEXA排名查询 | CSS在线编辑器 | 广告代码 | Html转换js | js/vbs加密 | md5加密 | 进制转换
实用工具:汉字翻译拼音 | 符号对照表 | 个税计算 | 经典小工具 | 汉字简繁转换 | 普通单位换算 | 公制单位换算 | 生辰老黄历 | 国内电话区号 国家代码与域名缩写 | 文字加密解密 | 健康查询 | 万年历 | 汉字横竖排版 | 手机号码查询 | 计算器 | ip搜索
业务联系 | 广告刊登 | 频道合作 | 投稿荐稿 | 联系方式 | 加入收藏 | RSS订阅
Copyright © 2000-2008 www.knowsky.com All rights reserved | 网络实名:动态网站制作指南 | 沪ICP备05001343号