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

oracle系统包——DBMS_PIPE用法的更多相关文章

  1. oracle系统包——dbms_random用法及order by 小结(转)

    dbms_random是一个可以生成随机数值或者字符串的程序包. 这个包有initialize().seed().terminate().value().normal().random().strin ...

  2. oracle系统包——dbms_alert用法

    oracle内部提供的在数据库内部和应用程序间通信的方式有以下几种:1.警报,就是DBMS_ALERT包提供的功能:2.管道,由DBMS_PIPE提供:3.高级队列,这个就很复杂,当然提供的功能也是很 ...

  3. oracle系统包——dbms_job用法(oracle定时任务)

    用于安排和管理作业队列,通过使用作业,可以使ORACLE数据库定期执行特定的任务. 一.dbms_job涉及到的知识点1.创建job:variable jobno number;dbms_job.su ...

  4. oracle系统包——dbms_random用法

    oracle中随机数的包的源文件目录:{oracle_home}\rdbms\admin\dbmsrand.sql 1.返回0~1间的随机数(包括0和1)sql> select dbms_ran ...

  5. oracle系统包—-dbms_output用法

    dbms_output包主要用于调试pl/sql程序,或者在sql*plus命令中显示信息(displaying message)和报表,譬如我们可以写一个简单的匿名pl/sql程序块,而该块出于某种 ...

  6. oracle系统包——dbms_transaction用法

    用于在过程,函数和包中执行sql事务处理语句. 1.read_only用于开始只读事务,其作用与sql语句set transaction read only完全相同2.read_write用于开始读写 ...

  7. oracle系统包——dbms job用法(oracle定时任务)

    用于安排和管理作业队列,通过使用作业,可以使ORACLE数据库定期执行特定的任务. 一.dbms_job涉及到的知识点1.创建job:variable jobno number;dbms_job.su ...

  8. .Net程序员学用Oracle系列(29):PLSQL 之批量应用和系统包

    1.批量数据操作 1.1.批量生成数据 1.2.批量插入数据 2.批量生成脚本 3.生成数据字典 4.常见系统包 4.1.DBMS_OUTPUT 4.2.DBMS_RANDOM 4.3.其它系统包及常 ...

  9. ORACLE中DBMS_SQL的用法

    ORACLE中DBMS_SQL的用法   对于一般的select操作,如果使用动态的sql语句则需要进行以下几个步骤: open   cursor---> parse---> define ...

随机推荐

  1. 前端技术俗语js

    注:原文是英文,本文是我翻译的.有人把我翻译的内容原文照抄,放到他自己的专栏,搞得有人问我是不是我抄袭了……请支持我的劳动成果,花了两个小时翻译的,谢谢.转载请注明译者为方应杭. 嘿,我最近接到一个 ...

  2. getTextContent()方法会出现The method getTextContent() is undefined for the type Node 提示

    eclipse 中 如果加入了 其他了xfire 等其他xml解析包的话,使用org.w3c.dom.Node下的getTextContent()方法会出现The method getTextCont ...

  3. redis整理の主从复制

    redis 主从复制配置和使用都非常简单.通过主从复制可以允许多个 slave server 拥有和 master server 相同的数据库副本. 特点: (1).master 可以拥有多个 sla ...

  4. duilib入门简明教程 -- XML基础类(7)

    现在大家应该对XML描述界面不那么陌生了,那么我们做进一步介绍. 前面的教程我们写了很多代码,为的是让大家了解下基本流程,其实duilib已经对常用的操作做了很好的包装,正式使用时无需像前面的教程那样 ...

  5. BOI2007 Mokia | cdq分治求二维点数模板

    题目链接:戳我 也没什么,其实主要就是为了存一个求二维坐标上矩形内点的个数的模板.为了之后咕咕咕地复习使用 不过需要注意的一点是,树状数组传x的时候可千万不要传0了!要不然会一直死循环的...qwqw ...

  6. TOMCAT在POST方法提交参数丢失问题

    最近写程序发现post参数接收不到了,jdk,eclipse,jar包,换了多次都不行,后来看到网上一篇文章: 随后设置Tomcat中POST方式提交数据大小: maxPostSize="0 ...

  7. CTSC2017酱油记

    恩..又是一篇酱油记.. 自从SHTSC完之后都在复习地理高考..根本没有刷题.. 于是就来CTSC了..因为奇怪的实验考..APIO又不能参加..只能拿一块Fe了.. DAY0 恩..不存在DAY0 ...

  8. [ActionScript 3.0] 正则表达式

    正则表达式: 正则表达式最早是由数学家Stephen Kleene在对自然语言的递增研究成果的基础上,于1956提出来的.具有完整语法的正则表达式,主要使用在字符串的格式的匹配方面上,后来也逐渐应用到 ...

  9. Python的并发编程

    我们将一个正在运行的程序称为进程.每个进程都有它自己的系统状态,包含内存状态.打开文件列表.追踪指令执行情况的程序指针以及一个保存局部变量的调用栈.通常情况下,一个进程依照一个单序列控制流顺序执行,这 ...

  10. css块元素及内联元素

    块级元素主要有: address , blockquote , center , dir , div , dl , fieldset , form , h1 , h2 , h3 , h4 , h5 , ...