DBMS_PIPE包用于在同一例程(实例)的不同会话之间进行通信;注意,如果用户要执行包dbms_pipe中的过程和函数,则必须要为用户授权。

sql>conn sys/oracle as sysdba;
sql>grant execute on dbms_pipe to scott;
 

一、管道:
1)、公有管道:所有数据库用户可访问。
2)、私有管道:只能建立管道的数据库用户可访问。

二、DBMS_PIPE包的过程和函数解析
CREATE_PIPE:用于建立公用管道或私有管道。如果将参数private设置为TRUE,则建立私有管道;如果设置为FALSE,则建立公用管道。
eg:

declare
   falg int;
begin
   flag:=dbms_pipe.create_pipe('public_pipe',8192,false);
   if flag=0 then
      dbms_output.put_line('建立公用管道成功');
   end if;
end;
/
 

PACK_MESSAGE:用于将消息写入到本地消息缓冲区
SEND_MESSAGE:用于将本地消息缓冲区中的内容发送到管道
RECEIVE_MESSAGE:用于接收管道消息
NEXT_ITEM_TYPE:用于确定本地消息缓冲区下一项的数据类型。
如果该函数返回0,则表示管道没有任何消息;
如果返回6,则表示下一项的数据类型为number;
如果返回9,则表示下一项的数据类型为varchar2;
如果返回11,则表示下一项的数据类型为rowid;
如果返回12,则表示下一项的数据类型为date;
如果返回23,则表示下一项的数据类型为raw.
UNPACK_MESSAGE:用于将消息缓冲区的内容写入到变量中.
REMOVE_PIPE:用于删除已经建立的管道
PUGER:用于清除管道中的内容
RESET_BUFFER:用于复位管道缓冲区
UNIQUE_SESSION_NAME:用于为特定会话返回惟一的名称,并且名称的最长度为30字节.

案例:
1、创建一个发消息的过程:

CREATE OR REPLACE PROCEDURE SEND_MESSAGE(PIPENAME VARCHAR2,
                                         MESSAGE  VARCHAR2) IS
  FLAG NUMBER;
BEGIN
  FLAG := DBMS_PIPE.CREATE_PIPE(PIPENAME);
  IF FLAG = 0 THEN
    DBMS_PIPE.PACK_MESSAGE(MESSAGE);
    FLAG := DBMS_PIPE.SEND_MESSAGE(PIPENAME);
  END IF;
END;
/
 

2、创建一个接收消息的包

CREATE OR REPLACE PROCEDURE RECEIVE_MESSAGE(PIPENAME VARCHAR2,
                                            MESSAGE  OUT VARCHAR2) IS
  FLAG NUMBER;
BEGIN
  FLAG := DBMS_PIPE.RECEIVE_MESSAGE(PIPENAME);
  IF FLAG = 0 THEN
    DBMS_PIPE.UNPACK_MESSAGE(MESSAGE);
    FLAG := DBMS_PIPE.REMOVE_PIPE(PIPENAME);
  END IF;
END;
/
 

3、运行包

--在一个会话中执行:
exec send_message('pipe','I send message');
--在另一会话中执行:
var message varchar2(200);
exec receive_message('pipe',:message);
print message;
 

执行结果如下:
PL/SQL procedure successfully completed
message
———
I send message

最新文章

  1. java中this 关键字的使用
  2. chVsprintf
  3. 【9-20】vimtutor学习笔记
  4. NPOI基本操作XLS
  5. 自定义progressBar的旋转圆圈
  6. 解决Intellij IDEA 通过archetype创建Maven项目缓慢的问题
  7. gulp自己主动化任务脚本在HybridApp开发中的使用
  8. C技巧:结构体参数转成不定参数
  9. eclipse 汉化
  10. 单调队列-hdu-3415-Max Sum of Max-K-sub-sequence
  11. Eclipse用link方式安装插件
  12. JSP中的Attribute和InitParameter
  13. graph isomorphism 开源算法库VFlib, Nauty
  14. linux ubuntu平台下安装Scrapy
  15. java IO之 序列流 集合对象Properties 打印流 流对象
  16. HTML阻止iframe跳转页面并使用iframe在页面内嵌微信网页版
  17. FZU 2285 迷宫寻宝
  18. springboot热部署配置
  19. POSIX
  20. 简单的词法设计——DFA模拟程序

热门文章

  1. thinkjs 框架图
  2. Android-读取操作系统通话记录并/拨打电话/发送短信/复制号码到拨号盘
  3. Android 工具类大全
  4. TSQL--SORT MERGE JOIN
  5. 把windows电脑变成路由器使用
  6. .net core i上 K8S(六).netcore程序的service网络代理模式
  7. ie8在win7系统下怎么安装或重装?[转载]
  8. TOMCAT在POST方法提交参数丢失问题
  9. BZOJ.5407.girls/CF985G. Team Players(三元环计数+容斥)
  10. ArchLinux 下 virtualbox 报错 libQtCore.so.4: cannot open shared object file